2012-05-01 24 views
0

我有一個ASP.NET MVC頁面的問題,它顯示了一個正在分派到特定位置的訂單列表。該頁面被稱爲Orders/DispatchToCentre/2,其中2是數據庫中心的ID,它顯示正常。Asp.Net MVC3 - 我可以調用字段「ID」,並沒有包含頁面ID?

麻煩的是,我希望能夠回發更改頁面上的訂單,所以我這樣做:

<dl class="orders"> 
@foreach (OrderViewModel ovm in Model) 
{ 
    <dd>@ovm.User.Name </dd> 
    <dt> 
    @Html.Partial("OrderTable", ovm) 
    <p> 
    @using (Html.BeginForm("Dispatch", "Order", new { id = ovm.Id }, FormMethod.Post)) 
    { 
     @Html.TextBox("id", ovm.Id); 
     @Html.Hidden("OriginatingPage", Request.Path); 
     <input type="submit" name="[email protected]" value="Order dispatched" />   
    } 
    </p> 

    </dt> 
} 
</dl> 

的問題是,當我看着頁面的源代碼,我得到這樣的:

<p> 
    <form action="/Order/Dispatch/3f180e5b-d112-4245-98ef-602e86eccda6" method="post"> 
     <input id="id" name="id" type="text" value="2" /> 
     <input id="OriginatingPage" name="OriginatingPage" type="hidden" value="/Order/DispatchToCentre/2" />  
     <input type="submit" name="submit-3f180e5b-d112-4245-98ef-602e86eccda6" value="Order dispatched" />   
    </form>  
    </p> 

id輸入似乎已經完全忽略了OrderViewModel.Id,我明確地將其設置爲(這應該是一個GUID)並自動設置本身,從路徑上使用這個中心ID而不是。

是否需要使用一些配置來避免這種干擾自動修復或我最好只是忽略此處的幫助程序並手動創建該字段?很明顯,後者是一項相當簡單的任務,但理解我是否在概念上誤解了Razor渲染動作的某個重要方面,或者我正在陷入一個怪癖。

回答

1

在控制器,HttpGet行動,返回視圖之前,你應該叫

ModelState.Remove("id"); 

事實是ModelState比模型本身提供模型值具有較高的優先級,所以從ModelState中值始終是首選(如果有的話)超過模型值

+0

因此,如果值位於Modelstate中,則與參數名稱相同的任何字段將自動設置爲該參數的值,而不管傳遞給生成該值的函數的值是什麼? – glenatron

相關問題