Asp.net mvc jqueryajax:更新ViewModel

Asp.net mvc jqueryajax:更新ViewModel,asp.net-mvc,jquery,Asp.net Mvc,Jquery,我有一个强类型MVC视图,其中包含一个带有绑定到视图模型的编辑器的表单: @model ViewModels.CommentView @using (Ajax.BeginForm("UpdateComments", new AjaxOptions { HttpMethod="POST" })) { <fieldset> <legend>Metadata</legend> <div> @

我有一个强类型MVC视图,其中包含一个带有绑定到视图模型的编辑器的表单:

@model ViewModels.CommentView
@using (Ajax.BeginForm("UpdateComments", new AjaxOptions { HttpMethod="POST" }))
{
    <fieldset>
        <legend>Metadata</legend>
        <div>
            @Html.HiddenFor(model => model.Id)
            <div class="editor-label">
                @Html.LabelFor(model => model.Comment)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.Comment)
                @Html.ValidationMessageFor(model => model.Comment)
            </div>
        </div>
        <p class="action clear">
            <input type="submit" value="Save" />
        </p>
    </fieldset>
}
当用户单击视图不同部分中的元素时,JQuery AJAX调用将从服务器检索数据并更新控件:

<script type="text/javascript">
    $(".load-comments").focus(function () {
        var Id = $("#Id").val();
        var url = "@Url.Action("GetComment")/" + Id;
        $.ajax({ url: url, success: DataRetrieved, type: 'POST', dataType: 'json' });
        function DataRetrieved(data) {
            if (data) {
                $("#Comment").val(data.Comment);
            }
        };
    });
</script>
此功能按预期工作:控件内容以可视方式更新。但是,底层html元素的值没有更新,当我将表单发布回服务器时,视图模型是空的


如何在JQuery函数中设置表单控件的值,以便它们发回服务器?

如何设置HTML?ASP.NET默认ModelBinder查找与对象属性相等的id,以便在服务器中重新构建模型。看起来您的表单HTML没有反映该对象。检查由Html帮助程序创建的每个元素,并在注释数据来自请求后创建相同的控件。希望它能帮助你!您可以创建一个自定义ModelBinder将您的模型绑定回服务器,请看这里:

您是否看到HTML页面中的值发生了更改?如果它被正确更改,那么元素将被更新。当您从控制台执行此操作时,它会说什么:$Comment.val。您是否尝试过使用HttpFiddler或chrome网络工具检查发送到服务器的确切内容?我认为该值实际上已正确更新并正确发送到服务器,但自动模型绑定有问题。@PaulTaylor您是如何设置HTML的?ASP.NET默认ModelBinder查找与对象属性相等的id,以便在服务器中重新构建模型。看起来您的表单HTML没有反映该对象。检查由Html帮助程序创建的每个元素,并在请求的coment数据发出后创建相同的控件。希望它能帮助你@福尔斯,我想你已经了解了一些事情。我简化了上面的代码以使其更易于阅读,但实际上元素名称很复杂,是从父viewmodel的属性派生的。我将尝试将元素名称与UpdateComment参数名称进行匹配,看看是否可以解决它。好的,解决了它,问题在于Kenneth和Fals建议的模型绑定。萤火虫/铬的症状是一个危险因素。如果有人发布,我会把它标记为答案!