我有一个强类型的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函数中设置表单控件的值,以便它们回发到服务器?
答案 0 :(得分:0)
你是如何设置HTML的? ASP.NET默认的ModelBinder查找等于对象属性的id,以便在服务器中构建模型。看起来您的表单HTML不反映该对象。检查由Html帮助程序创建的每个元素,并在评论数据来自请求后创建每个控件。希望对你有所帮助!您可以创建自定义ModelBinder以将模型绑定回服务器,请查看此处:Model Biding