2011-10-21 24 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