2012-09-07 80 views
1

我有一個ModelA模型和一個強類型視圖ViewA,輸入爲ModelA。如你所知,如果你宣佈一個動作說「ActionAPost」像這樣的簽名:在強類型視圖中分配模型變量

[HttpPost] 
public ActionResult ActionAPost(ModelA mod) { 
    // code 
} 

它將綁定在這種情況下mod設置好的形式MODELA實例上的值。我想要做這樣的事情:

ViewA:

@ModelAInstance.SomeAttr = ViewBag.SomeAttr; 

staticaly分配一定的參考價值,將通過後的動作處理的模型屬性。

編輯:

值是預先設定的ViewBang

+0

我試過了,但據我所知要獲得@Model的訪問權限,您必須將其從操作視圖(ModelA)傳遞給它。只是你最終得到了兩個不同的實例,而且只有一個來自後置操作的入口,就是你在參數上收到的一個入口。 – loki

回答

4

所以在視圖中有一個隱藏的元素,其中name屬性反映了模型和屬性的對象路徑。這樣它將綁定回你的POST操作如何你想它

例子:

<input type="hidden" name="SomeAttr" value="@ViewBag.SomeAttr" /> 

剃刀和ViewBag

GET要求坐落在模型中的價值,然後用剃刀:

@Html.Hidden("SomeAttr", (object)ViewBag.SomeAttr); 

@Html.HiddenFor(m => m.SomeAttr, new { value = ViewBag.SomeAttr });

+0

對不起,混亂,任務蕭條完成從剃刀聲明,請參閱我的編輯。 – loki

+0

第二種方式起作用,爲什麼它沒有向我發送隱藏的輸入,tnx。 – loki

+0

實驗是你如何學習:) – Gabe

1

創建表單隱藏變量,與同名爲您的視圖模型

<input type="hidden" name="SomeAttr" value="@ViewBag.SomeAttr" /> 

現在,在您的文章動作的屬性名稱,你可以通過訪問SomeAttr財產

public ActionResult Add(ModelA model) 
{ 
    //check for model.SomeAttr here 

} 
得到這個

假設您的型號ModelA具有SomeAttr屬性。 MVC Modelbinding在發佈時將輸入綁定到模型對象。