0

私には理解できない初心者の問題があります.asp.netコントローラーからの部分ビューから生成されたフォームがあり、jqueryダイアログに表示されます.

ダイアログに2つのボタンがあります(保存/キャンセル)

保存ボタンで、フォームからの入力をシリアル化してAsp.net mvc actionControllerに送り返したいのですが、うまくいかないようです.actioncontrollerはJqueryダイアログからモデルオブジェクトを取得していません.フォームの Jquery Serialize 関数。

スクリプトコードは次のとおりです。

<button id="btnDialog">Account Logon</button>

<div id="Logonform"></div>

<script type="text/javascript">

    $(document).ready(function () {

        $.validator.unobtrusive.parse("#Logonform");

        $("#Logonform").dialog({
            autoOpen: false,
            modal: true,
            title: 'Login',

            buttons: {
                Save: function () {
                    alert($("#Logonform").serializeArray());
                    alert($("#Logonform").attr('UserName'));

                    $.ajax({
                        url: "@Url.Action("LogOn", "Account")",
                        type: "POST",
                        data: $("#Logonform").serialize(),
                        datatype: "JSON",
                        success: function (result) {
                            $("#Logonform").html(result).dialog('open');
                        }
                    });
                },

                Close: function () {
                    $(this).dialog('close');
                }
            }

        });

        $("#btnDialog").click(function () {
            $.ajax({
                url: "@Url.Action("LogOn", "Account")",
                type: "GET",
                success: function (result) {
                    $("#Logonform").html(result).dialog('open');
                }

                });
        });
    })

</script>

コントローラー:

    public ActionResult LogOn()
    {
        if (Request.IsAjaxRequest())
        {
            return PartialView("_Logon");

        }
        return View();
    }

    [HttpPost]
    public ActionResult LogOn(LogOnModel model)
    {
        if (ModelState.IsValid)
        {
            if (Membership.ValidateUser(model.UserName, model.Password))
            {
                FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
                return Json( new { result = "ok", user = model.UserName });
            }
            else
            {
                return PartialView("_Logon");
            }
        }

景色:

@model JqueryDialogTest.Models.LogOnModel


<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Models/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@Html.ValidationSummary(true, "Échec de la connexion. Corrigez les erreurs et réessayez.")

@using (Html.BeginForm()) {
    <div>
        <fieldset>
            <div class="editor-label">
                @Html.LabelFor(m => m.UserName)
            </div>
            <div class="editor-field">
                @Html.TextBoxFor(m => m.UserName)
                @Html.ValidationMessageFor(m => m.UserName)
            </div>

            <div class="editor-label">
                @Html.LabelFor(m => m.Password)
            </div>
            <div class="editor-field">
                @Html.PasswordFor(m => m.Password)
                @Html.ValidationMessageFor(m => m.Password)
            </div>

            <div class="editor-label">
                @Html.CheckBoxFor(m => m.RememberMe)
                @Html.LabelFor(m => m.RememberMe)
            </div>

        </fieldset>
    </div>
}

何が間違っているかを指摘するあなたからのコメントは非常にありがたいです

乾杯

4

1 に答える 1

0

LogonアクションパラメータをLogonModelタイプから文字列に変更し、JavascriptSerializerを使用してactionメソッドで自分で逆シリアル化してみてください。それでも機能しない場合は、Fiddlerを使用して、POSTで送信されているもの(ある場合)を確認します。

于 2012-04-04T20:28:34.720 に答える