2013-01-15 26 views
3

定義參數模型MVC:請只需要對某些觀點

[Required(AllowEmptyStrings = false, ErrorMessage = "No null")] 
[DisplayName("Name")] 
public string Name { get; set; } 

是更多鈔票來改變這個參數對某些觀點的屬性後模型參數?例如,我想這些特性(所需的屬性),以保持視圖1,視圖2和視圖3而不是view4。我可以禁用view3的這個屬性嗎?

+1

呃......這聽起來像是違反了MVC流程,您的控制器/模型不應該知道任何關於或關心視圖的事情。如果一個視圖模式不應該看到一些屬性,也許它不應該使用相同的控制器/模型。 – Rudu

+2

請停止指的是「ASP.NET MVC」簡稱爲「MVC」。一個是框架,而另一個是獨立於語言的設計模式。這就像打電話給IE - 「互聯網」 –

+1

聽起來像你需要一個View3的不同viewmodel :) – scartag

回答

4

是它更多鈔票改變這個參數對於某些視圖的屬性?

否,屬性烘烤成在編譯時的組裝。

正確的方式做,這是使用視圖模型:

public ActionResult Create(CreateViewModel model) 
{ 
    ... the name will not be required here 
    if (ModelState.IsValid) 
    { 

    } 
} 


public ActionResult Edit(EditViewModel model) 
{ 
    ... the name will be required here 
    if (ModelState.IsValid) 
    { 

    } 
} 

public class CreateViewModel 
{ 
    [DisplayName("Name")] 
    public string Name { get; set; } 
} 

public class EditViewModel 
{ 
    [Required(AllowEmptyStrings = false, ErrorMessage = "No null")] 
    [DisplayName("Name")] 
    public string Name { get; set; } 
} 

,並且將在submiting形式從2次叫你們各自的控制措施將與視圖模型工作

替代辦法將包括自定義模型粘合劑或實施IValidatableObject接口和做基於當前操作一些動態驗證。用兩個詞,你正在走向深淵。個人這是不是我會惹但如果你想隨時在那個方向去探索,如果你不喜歡我推薦的解決方案。

+0

所以,如果名稱模型上有一個MaxLength,你會在每個視圖模型上具有相同的屬性?你想要的任何模型屬性都會被複制? –

相關問題