2010-10-17 24 views
3

我有一個具有參數(JobID)的操作的控制器。我驚訝地發現它在控制器返回的視圖中自動映射到具有相同名稱的隱藏字段。我正在使用強類型的視圖模型,並假定我需要傳遞所有模型屬性作爲視圖模型的一部分。看來情況並非如此。控制器操作參數是否自動映射以查看輸入標籤?

我知道視圖字段映射回調用控制器上的動作參數,但沒有意識到這兩種方式都有效。我是否正確理解這一點?有這個問題嗎?

回答

2

如果您使用HTML幫助程序生成這些輸入標記,那麼在渲染時,它們將首先查看請求參數(POST和GET),然後查看模型和ViewData。條件是具有相同名稱的操作參數。

問題在於,您無法修改控制器操作內部的值,並始終使用傳遞的參數值。因此,請考慮以下POST操作:

[HttpPost] 
public ActionResult Index(Job job) 
{ 
    job.JobID = 10; 
    return View(); 
} 

這是發佈到jobID = 5。即使您將值設置爲10,html助手在渲染時也會使用5

+1

在我的情況下,我有一個視圖模型,其參數被命名爲與動作參數相同。我忘了在控制器中設置視圖模型的值,並且很驚訝地發現視圖中的值是正確的。這顯然是從操作參數中拉取值。 對我來說,這一切都似乎有點反作用基於你指出的問題。查看映射回行爲的字段似乎對我來說是完全有意義的。動作參數映射到視圖並覆蓋強類型的視圖模型,這似乎是錯誤的。你能指出做這件事的正當理由嗎? 謝謝, – andleer 2010-10-19 02:23:47

+0

這也讓我感到困惑。我真的不喜歡在後臺發生這樣的魔術,我花了幾個小時試圖弄清楚爲什麼我的視圖使用了一些默認值,而我從未初始化或傳遞過它。調試時也找不到它的痕跡。我似乎無法找到任何官方文檔 - 我期望在這裏的某處提及它,但它不是:http://msdn.microsoft.com/en-us/library/dd410269(v=vs 0.98)的.aspx – 2013-06-26 21:07:00

相關問題