我正在使用视图模型和局部视图来使用AJAX插入行。插入新行时,ViewModel的ID(AttributeDefinitionID
)将设置为零。保存时,ID会更新并发送回视图。然而,绑定到ID的帮助程序似乎仍然具有旧值。
查看模型
public class AttributeEntryViewModel
{
public int AttributeDefinitionID { get; set; }
[Required]
[MaxLength(255, ErrorMessage = "Name must be less than
255 characters in length.")]
public string Name { get; set; }
}
部分视图“_AttributeEntryPartial.cshtml”
@model ICMDB.ViewModels.AttributeEntryViewModel
<tr id ="@Model.AttributeDefinitionID" >
@Html.HiddenFor(model => model.AttributeDefinitionID)
<td>
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</td>
<td>
<a href="#" onclick="RemoveAttribute(@Model.AttributeDefinitionID);
return false;">Remove</a>
</td>
</tr>
出于某种原因,Html Helper Html.HiddenFor
没有绑定到正确的值并生成以下Html:
<tr id="40850">
<input id="AttributeDefinitionID" type="hidden" value="0"
name="AttributeDefinitionID" data-val-required="The
AttributeDefinitionID field is required." data-val-number= "The
field AttributeDefinitionID must be a number." data-val="true">
您可以看到它已在行标记(<tr id = "40850">
)中正确插入了ID,但未在输入标记(value="0"
)中插入。那应该是value="40850"
。
有什么想法吗? Html Helper或浏览器是否缓存了值?
编辑: AJAX函数AddAttribute只调用同名的控制器函数,并将得到的部分(上面列出的部分)附加到表中:
function AddAttribute() {
// and send it as AJAX request
$.ajax({
url: '@Url.Action("AddAttribute")',
type: 'POST',
cache: false,
success: function (result) {
// when the AJAX succeeds add result to the table
$('#AttributesTable').append(result);
}
})
}
[HttpPost]
public ActionResult AddAttribute()
{
var model = new AttributeEntryViewModel();
return PartialView("_AttributeEntryPartial", model);
}
答案 0 :(得分:2)
差异的原因与浏览器中的缓存无关。浏览器将整个HTML页面缓存为一部分(更正确:浏览器不会缓存HTTP请求结果的部分内容)
您的问题是POST请求中的值与模型中的值的差异。这在post
中有详细解释