tryupdatemodel не работает через ajaxcall? - PullRequest
0 голосов
/ 22 июля 2011

Я пытаюсь опубликовать свою модель на сервере с помощью вызова 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;
    }
}

1 Ответ

2 голосов
/ 23 июля 2011

В вашем AJAX-запросе вы отправляете только значение скрытого поля:

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

, поэтому вы не можете ожидать получения каких-либо других значений на вашем сервере, кроме этого скрытого поля.Если вы хотите POST все содержимое формы, используйте переменную formData, которую вы объявили в своем коде, но оставили неиспользованной:

$('#submitbutton').click(function () {
    var formData = $('#ajaxForm').serialize();
    $.ajax({
        type: 'POST',
        url: '/Home/SaveAjax',
        data: formData,
        dataType: 'json'
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...