我在我的MVC 3項目中有一個模型的強類型剃刀視圖。基本上它用於編輯模型。MVC 3 POST數據和Id字段
模型包含數據庫鍵和一些其他字符串字段(它是一個viewModel和所有的但不是問題的重點)的Id字段。
在視圖中我只是有一個表單和提交按鈕,沒有別的。當視圖發佈到控制器時,控制器中的模型除了Id字段外,其他所有字段都是空的,這似乎是自動填充的。
Id字段如何在模型中填充,而在視圖中沒有相應的「輸入」元素。
這可能是一個愚蠢的問題,但即使只是一個鏈接,我應該閱讀。謝謝。
我在我的MVC 3項目中有一個模型的強類型剃刀視圖。基本上它用於編輯模型。MVC 3 POST數據和Id字段
模型包含數據庫鍵和一些其他字符串字段(它是一個viewModel和所有的但不是問題的重點)的Id字段。
在視圖中我只是有一個表單和提交按鈕,沒有別的。當視圖發佈到控制器時,控制器中的模型除了Id字段外,其他所有字段都是空的,這似乎是自動填充的。
Id字段如何在模型中填充,而在視圖中沒有相應的「輸入」元素。
這可能是一個愚蠢的問題,但即使只是一個鏈接,我應該閱讀。謝謝。
我敢打賭,它來自url作爲路由參數。
例如您有以下控制器:
public class HomeController: Controller
{
public ActionResult Index(int id)
{
vqr model = GetModel(id);
return View(model);
}
[HttpPost]
public ActionResult Index(MyViewModel model)
{
// the model.Id property will be automatically populated here
// because the request was POST /home/index/123
...
}
}
與以下幾種觀點:
@model MyViewModel
@using (Html.BeginForm())
{
<button type="submit">OK</button>
}
現在你導航到GET /home/index/123
,你會得到下面的標記:
<form action="/home/index/123" method="post">
<button type="submit">OK</button>
</form>
注意表格的action
屬性?這就是ID的來源。基本上,Html.BeginForm()
幫助程序在生成操作屬性時使用當前網址,並且由於當前網址爲/home/index/123
,因此它被使用了。
而且,如果您在Global.asax中保留了默認路由,則在url的末尾會使用{id}
路由令牌,默認模型綁定程序會成功將其綁定到您的視圖模型的Id
屬性。
你可能打類似如下的URL:/爲MyObject /編輯/ 15
這然後返回,你有你的空白表單的頁面。
接下來發生的事情是你有一個HTML.BeginForm(),這是BACK張貼到/ MyObject來/編輯/ 15
現在,因爲該職位的背面具有相同格式的路由規則撿'15 '並將其綁定回您的ID。
您是否將ID字段添加爲隱藏字段?
例如 @ Html.HiddenFor(x => x.ID)
非常感謝。我猜想它來自路線參數,但不知道如何。 – NVM 2012-03-05 12:30:57