2011-07-12 87 views
0

如何將變量傳遞到視圖內的多個局部視圖?我的想法是,每個部分視圖將在一個表單中構成一個不同的字段,並且我計劃使用動態創建的每個部分視圖的DOM對象。所以我需要傳入3個參數。一個ID(唯一標識每個DOM對象)及其特定的控制器和操作。我認爲如何做到這一點?將不同參數傳遞給視圖中的多個局部視圖

例如,我想做的事的東西線...

@Html.Partial("_BookField", Model, 1, "book", "updateauthor") 

@Html.Partial("_BookField", Model, 2, "book", "updatetitle") 

@Html.Partial("_BookField", Model, 3, "book", "updatepublisher") 

有沒有辦法做到這一點沒有在模型中增加額外的屬性?

編輯:在與我的一位同事交流之後,他提出了一個我想澄清的問題。他建議我正在做的是在視圖中引入控制器/動作邏輯,這是打破了MVC的概念。但是像ActionLinks這樣的東西,你必須將控制器和動作放在動作鏈接中才能做到。我試圖做的是考慮打破MVC模式?

回答

2

您使用View當然型號:

public class SubViewModel 
{ 
    public int Id { get; set; } 
    public string Book { get; set; } 
    public string Author { get; set; } 
} 

,然後讓你的主視圖模型這SubViewModel的不同屬性:

public class MyMainViewModel 
{ 
    public SubViewModel Sub1 { get; set; } 
    public SubViewModel Sub2 { get; set; } 
    public SubViewModel Sub3 { get; set; } 
} 

,然後簡單地說:

@Html.Partial("_BookField", Model.Sub1) 
@Html.Partial("_BookField", Model.Sub2) 
@Html.Partial("_BookField", Model.Sub3) 

中當然,現在控制器的行動責任是填補這些視圖模型(一如既往)。如果你使用的編輯器/顯示模板的代碼可能會更簡單,就像這樣:

@Html.DisplayFor(x => x.Sub1) 
@Html.DisplayFor(x => x.Sub2) 
@Html.DisplayFor(x => x.Sub3) 

因爲這奇怪的是在我看來就像一個集合,那麼,你可以使用一個集合:

public class MyMainViewModel 
{ 
    public SubViewModel[] Subs { get; set; } 
} 

,然後簡單地說:

@Html.DisplayFor(x => x.Subs) 
+0

如果你需要發送另一個對象除了該視圖模型,會發生什麼?我的意思是,是否有辦法將兩個對象直接發送到視圖或局部視圖,而無需將它們封裝到具有兩者的類中? – user558594

+0

@ user558594,這不應該發生。在這種情況下,您只需爲視圖模型定義一個附加屬性,它將一起發送。 –

+0

啊,我想我現在明白了。謝謝您的幫助。 – user558594