2011-07-22 4 views
0

私はモデルをサーバーにajax呼び出しで投稿しようとしています。残念ながら、モデルは更新されていませんか?tryupdatemodelはajaxcallで動作しませんか?

data: { inputdata: $("#myModel").val() } 

ので、あなたは、この隠しフィールドよりも、サーバー上の任意の他の値を得ることを期待することはできません:あなたは隠しフィールドの値のみを送信しているあなたのAJAXリクエストで

<script src="../../Scripts/jquery-1.4.1.min.js" type="text/javascript"></script> 

<form id="ajaxForm" action=""> 
    <div> 
     name:<%= Html.TextBoxFor(model => model.number) %> 
    </div> 
    <%--hidden vars--%> 
    <input type="hidden" id="Hidden1" /> 
    <%= Html.Hidden("myModel", Model.Serialize())%> 
</form> 
<button id="submitbutton"> 
    save 
</button> 

<script type="text/javascript"> 

    $(document).ready(function() { 
     $("#submitbutton").click(function() { 
      var FormData = $("#ajaxForm").serialize(); 
      $.ajax({ 
       type: 'POST', 
       url: "/Home/SaveAjax", 
       data: { inputdata: $("#myModel").val() }, 
       datatype: 'JSON' 
      }); 
     }) 
    }); 

</script> 




    [HttpPost] 
    public JsonResult SaveAjax(string inputdata) 
    { 
     MyModel myModel = (inputdata.DeSerialize() ?? TempData["myModel"] ?? new MyModel()) as MyModel; 

     //TryUpdateModel does not update my model?? 
     TryUpdateModel(myModel); 

     TempData["myModel"] = myModel; 

     return Json(new { resultaat = "finished" }); 
    } 


[Serializable] 
public class MyModel 
{ 
    //[Required] 
    public string name { get; set; } 
    public bool flag { get; set; } 
    public int number { get; set; } 
    public string address { get; set; } 
    public string abn { get; set; } 
    public string postalcode { get; set; } 
} 


public static class Extensions 
{ 
    public static string Serialize(this object myobject) 
    { 
     var sw = new StringWriter(); 
     var formatter = new LosFormatter(); 
     formatter.Serialize(sw, myobject); 
     return sw.ToString(); 
    } 

    public static object DeSerialize(this string mystring) 
    { 
     if (string.IsNullOrEmpty(mystring)) 
      return null; 
     var formatter = new LosFormatter(); 
     MyModel mym = (MyModel)formatter.Deserialize(mystring); 
     return mym; 
    } 
} 

答えて

2

$('#submitbutton').click(function() { 
    var formData = $('#ajaxForm').serialize(); 
    $.ajax({ 
     type: 'POST', 
     url: '/Home/SaveAjax', 
     data: formData, 
     dataType: 'json' 
    }); 
}); 
+0

私はすべてが完全な形を送信するよう検討していたけど...私はデータ型を行方不明になった:JSONフォーム全体の内容を転記する場合、あなたのコード内で宣言されていますが、未使用のままformData変数を使用します....その行を追加することによって...働いた! – Jimmy