Html Helper可能缓存输入值

时间:2011-10-21 04:26:49

标签: c# .net html asp.net-mvc caching

我正在使用视图模型和局部视图来使用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);
}

1 个答案:

答案 0 :(得分:2)

差异的原因与浏览器中的缓存无关。浏览器将整个HTML页面缓存为一部分(更正确:浏览器不会缓存HTTP请求结果的部分内容)

您的问题是POST请求中的值与模型中的值的差异。这在post

中有详细解释