2012-08-31 152 views
1

我剛剛陷入一團亂麻,無法自拔。我有以下的域模型(減少簡潔):MVC 3複雜模型綁定

public class Questionnaire 
{ 
    public int Id { get; set; } 
    public IList<QuestionGroup> QuestionGroups { get; set; } 
} 

public class QuestionGroup 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public int Order { get; set; } 
    public IList<Question> Questions { get; set; } 
} 

public class Question 
{ 
    public int Id { get; set; } 
    public string Text { get; set; } 
    public string Type { get; set; } 
    public string Headings { get; set; } 
    public IList<Answer> Answers { get; set; } 
} 

public class Answer 
{ 
    public int Id { get; set; } 
    public string Text { get; set; } 
} 

現在,當我渲染我在我看來Questionnaire我使用EditorTemplates每個QuestionGroupQuestion。在渲染我的Question時,我正在查看Type屬性(類似於RadioButtonList或TextArea)以及每個Heading(這是逗號分隔的字符串)。因此,例如,假設我們有一個Question初始化像這樣:

var question = new Question() { 
    Text = "My Question Text", 
    Type = "RadioButtonList", 
    Headings = "Very Difficult,2,3,4,Very Easy" 
}; 

然後,我們最終會得到這樣的:

enter image description here

這是我EditorTemplate產生像這樣:

@foreach (var heading in Model.Headings.Split(',')) 
{ 
    <li> 
     <div> 
      <strong>@heading</strong> 
      @Html.RadioButton(Model.Id.ToString(), heading) 
     </div> 
    </li> 
} 

這個標記看起來像這樣:

<ul> 
    <li> 
     <div> 
      <strong>Very Difficult</strong> 
      <input id="group_question_1" name="group.question.1" type="radio" value="Very Difficult" /> 
     </div> 
    </li> 
    <li> 
     <div> 
      <strong>2</strong> 
      <input id="group_question_1" name="group.question.1" type="radio" value="2" /> 
     </div> 
    </li> 
    <li> 
     <div> 
      <strong>3</strong> 
      <input id="group_question_1" name="group.question.1" type="radio" value="3" /> 
     </div> 
    </li> 
    <li> 
     <div> 
      <strong>4</strong> 
      <input id="group_question_1" name="group.question.1" type="radio" value="4" /> 
     </div> 
    </li> 
    <li> 
     <div> 
      <strong>Very Easy</strong> 
      <input id="group_question_1" name="group.question.1" type="radio" value="Very Easy" /> 
     </div> 
    </li> 
</ul> 

我已經產生了自定義模型綁定但是這是我有點卡住了。我的實際問題是:

  1. 如何在視圖中基於我的域模型持續選擇的值?
  2. 我甚至對這樣的事情使用正確的方法,還是我的方式?

我必須承認,我仍然非常處於MVC的學習階段,所以我可能因爲自己的嘗試而有點盲目。任何幫助總是感激!

+4

不要混淆使用,以顯示視圖的模型,並用於獲取結果的模型 - 這些_can_(和可能_應該不同)。請參閱Dino的[三種ASP.NET MVC應用程序模型](http://www.simple-talk.com/dotnet/asp.net/the-three-models-of-asp.net-mvc-apps/)埃斯波西託。 – Oded

+0

@Oded:有趣的是,我確實考慮使用視圖模型作爲代理,但試圖通過使我的表示層直接與域模型一起工作來儘量減少我的代碼 - 我同意這是例外而非規則,但它適用於我到目前爲止。 –

回答

1

你應該有你的數據庫實體和視圖之間的視圖模型。如果你想添加例如。驗證它會在你的db類中使用驗證屬性非常麻煩。 從長遠來看,viewmodels將爲您節省時間。