2012-04-04 4 views
0

私は理解できないちょっとした初心者の問題があります。私はasp.netコントローラーからの部分的なビューから生成したフォームを持っています。 jqueryダイアログに表示されます。JqueryダイアログからAsp.net MVC 3コントローラーにJson形式のデータをシリアル化できません

私は保存ボタンでダイアログ上の2つのボタン(キャンセル/保存)

を持って、私はAsp.net MVC actionControllerに戻ってそれを送信するために、フォームからの入力をシリアル化したい、しかし、それはdoesnの動作しているようで、actioncontrollerはJquery Dialogからモデルオブジェクトを取得しません。フォームの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> 
} 

間違って非常に感謝されるものを指摘して、あなたからの任意のコメントここ

は、スクリプトコードです

乾杯してください

答えて

0

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

+0

こんにちは、あなたの提案はそれを行う方法ですが、私はデータからスクリプトを変更しました:$( "#Logonform")serialize()データ:$( 'form')。 ()、それは完全に動作するようになりましたが、actionControllerはobjetを正しく取得しましたが、別の問題が発生しました.JsonフォームをactionControllerメソッドに送信する前にダイアログボックスにクライアントの検証はありません。 – dtjmsy

+0

あなたはAJAX呼び出しのためにJQueryを使用しているので、検証のためにJQueryを使用します。検証に関するいくつかのJQeryドキュメントがあります(http://docs.jquery.com/Plugins/Validation)。 –

関連する問題