2012-03-05 51 views
1

我在我的MVC 3項目中有一個模型的強類型剃刀視圖。基本上它用於編輯模型。MVC 3 POST數據和Id字段

模型包含數據庫鍵和一些其他字符串字段(它是一個viewModel和所有的但不是問題的重點)的Id字段。

在視圖中我只是有一個表單和提交按鈕,沒有別的。當視圖發佈到控制器時,控制器中的模型除了Id字段外,其他所有字段都是空的,這似乎是自動填充的。

Id字段如何在模型中填充,而在視圖中沒有相應的「輸入」元素。

這可能是一個愚蠢的問題,但即使只是一個鏈接,我應該閱讀。謝謝。

回答

4

我敢打賭,它來自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屬性。

+0

非常感謝。我猜想它來自路線參數,但不知道如何。 – NVM 2012-03-05 12:30:57

1

你可能打類似如下的URL:/爲MyObject /編輯/ 15

這然後返回,你有你的空白表單的頁面。

接下來發生的事情是你有一個HTML.BeginForm(),這是BACK張貼到/ MyObject來/編輯/ 15

現在,因爲該職位的背面具有相同格式的路由規則撿'15 '並將其綁定回您的ID。

0

您是否將ID字段添加爲隱藏字段?

例如 @ Html.HiddenFor(x => x.ID)