2012-12-09 76 views
2

我的工作,我已經定義了下面的模型一個ASP.NET MVC3項目:爲什麼@ Html.HiddenFor爲指定的其他模型屬性設置值?

public class Model{ 
    [Key] 
    int Id { get; set; } 
    int MappedId { get; set; } 
} 

這個模型是從控制器到Razor視圖過去了,如下:

public class Controller:Controller{ 
    public ActionResult Edit(int id) { 
     Model model = repository.Get(id); 
     return View(model); 
    } 
} 

模型屬性渲染視圖:

@using(Html.BeginForm()) { 
    @Html.HiddenFor(model => model.Id); 
    @Html.HiddenFor(model => model.MappedId) 
} 

什麼奇怪的是,兩個隱藏的投入得到相同的值,即使模特屬性有傳遞給View的值不同。例如。如果Model.Id具有值0和Model.MappedChannelId具有值7,兩個隱藏的輸入被設定爲相同的值7:

<input id="Id" class="valid" type="hidden" value="7" name="Id" data-val-required="The Id field is required." data-val-number="The field Id must be a number." data-val="true"> 
<input id="MappedId" class="valid" type="hidden" value="7" name="MappedId" data-val-required="The MappedId field is required." data-val-number="The field MappedId must be a number." data-val="true"> 

任何人是否有關於爲什麼Html.HiddenFor(型號=>模型的想法。 Id)將該值設置爲與model.MappedId相同的值,即使model.Id在傳遞給View時有不同的值?

+0

這是不正常的。我懷疑,也許你的價值觀在它們達到渲染引擎之前就已經改變了。檢查'返回視圖(模型)'語句中的模型狀態,然後再次檢查一次它在視圖中命中'@Html ...'語句。 –

回答

2

我的猜測是你從你的動作的id參數中獲得MappedId值。然後,您將Id屬性設置爲其他值。但是在您的視圖中,您仍然擁有來自操作參數的Id值,並且默認模型聯編程序將該值用於綁定Id屬性。它基本上忽略了模型實例的值。

您可以通過更改模型中Id屬性的名稱來解決此問題。如果你不想這樣做,你應該改變action參數的名字。但是,如果您不想通過querystring傳遞其值,則需要爲其創建自定義路由。

+0

這聽起來很合理,很可能是我的問題的原因。我會馬上嘗試你提出的解決方案! –

相關問題