2013-01-10 88 views
1

我知道類似的問題已經被問關於複雜的模型在ASP.NET MVC約束力,但我有一個問題,因爲缺乏足夠的前綴回來結合在POST上,並想知道是否有一個簡單的解決方案。ASP.NET MVC綁定到視圖模型以及路由值

我有一個看起來像這樣一個觀點型號:

public class ViewModel<Survey, Contact> 
{ 
    public Survey Model { get; set; } 
    public Contact Model2 { get; set; } 
} 

然後我有一個動作方法,像這樣接受張貼

public ActionResult Survey(
    string id, string id2, SurveyViewModel<Survey, Contact> model) 
{ 
    // code goes here... 
} 

在我的形式,前兩個ID是從URL路由,然後我有表單代碼(使用@Html.EditorFor(x => x.Model.SurveyName)或類似的),用這樣的名字生成:

<input class="text-box single-line" id="Model_Email" 
     name="Model.Email" type="text" value="" /> 

一個帖子作品,如果我改名字從Model.Emailmodel.Model.Email,但我想,以避免創建自定義模型粘合劑。

  1. 的設置,我可以在更改名稱在使用@Html.EditorFor類型的視圖助手視圖呈現各領域的看法做什麼呢?
  2. 我可以改變使用綁定屬性的動作,將允許它默認綁定到該對象?

答案可能是「建立一個自定義聯編程序」,但我只是想在提出這個問題之前提出這個問題。

感謝您的幫助。最好的問候,

哈爾

+2

你試圖改變你的'Model'屬性的名稱?當模型具有名爲Model的屬性時,模型聯編程序會感到困惑。 – jrummell

+0

同樣,你有沒有嘗試在你的動作中重命名模型參數? – rossisdead

回答

2

您可以通過自定義HtmlFieldPrefix查看自定義的可視數據。每個用helper呈現的控件都會有這個前綴。

ViewData.TemplateInfo.HtmlFieldPrefix = "prefix here"; 

看看這個:Forcing EditorFor to prefix input items on view with Class Name?

+1

我最終覆蓋了OnActionExecuting並在其中設置了設置HtmlFieldPrefix。只要我將發佈的視圖模型命名爲與前綴以及接受它的任何操作相同的東西,事情似乎就很好。 – Hal

+0

我的意思是OnActionExecuted(執行後,不是預先) – Hal