1

我有一个强类型 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 函数中设置表单控件的值,以便它们回发到服务器?

4

1 回答 1

0

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

于 2013-05-13T14:16:34.100 回答