2011-10-21 27 views
2

我正在使用视图模型和局部视图来使用AJAX插入行。插入新行时,ViewModel的ID(AttributeDefinitionID)被设置为零。保存时,ID会更新并发送回视图。然而,绑定到ID的助手似乎仍然具有旧的价值。Html助手可能为输入缓存值

视图模型

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辅助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"> 

你可以看到它已经正确插入了ID在行标记(<tr id = "40850">)中但不在输入标记(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

您能否深入解释AJAX部分?我不知道这个问题是不是AJAX相关,因为我没有看到任何AJAX代码:) – saintedlama

回答

2

其原因的差异无关在浏览器中使用缓存。浏览器将缓存您的HTML页面整体而不是部分(更正确:浏览器不会缓存部分HTTP请求的结果)

您的问题是比较POST请求中的值的差异到模型中的值。这在这个深度解释post

+1

你是对的,这实际上暴露了一个更大的东西 - 我没有在POST后重定向。在链接的帖子的评论中有一个链接,它总结得非常好:http://blogs.msdn.com/b/simonince/archive/2010/05/05/asp-net-mvc-s- HTML的助手渲染最错误的value.aspx。 – link664