2011-09-08 108 views
1

我有一個MVC項目。MVC綁定數據

我在數據庫中有問題,我希望我的用戶回答。我有他們在數據庫中,因爲他們需要能夠動態。用戶需要提交每個問題的答案。所以當視圖顯示時,它會顯示每個問題的問題和文本框。

以何種手段去這樣做,因爲我要像@ Html.textBox(「問題1」)等

  1. 問題1 在提問硬編碼__的最佳方式TextBox1中 ___]
  2. 問題2 [__ TextBox2中 ___]

...等

回答

1

我可能有一個ViewModel包含一個自定義QuestionResponder類型的集合。

IEnumerable<IQuestionResponder> Questions{get;set;} 

public interface IQuestionResponder{ 
    Guid QuestionId{get;set;} 
    string Question{get;set;} 
    string Answer{get;set;} 
} 

然後,您可以創建新視圖模型所需的顯示項目。

@for(var i = 0; i <= questionList .Count; i++) 
{ 
    @Model.Questions.ToList()[i].Question 
    @Html.TextBoxFor(m => m.Questions.ToList()[i].Answer) 
} 

Alternartively您可以創建一個EditorTemplate,以避免在您看來循環:

Insdie ~/Views/Shared/EditorTemplates/添加一個名爲QuestionResponder新視圖(自定義類的名稱)。

內部的模板,可以再加入:

@model MyApp.Models.QuestionResponder 
<div> 
    @Html.DisplayFor(m => m.Question) 
    @Html.TextBoxFor(m => m.Answer) 
</div> 

當你再從原來的觀點稱:

@Html.EditorFor(m => m.Questions) 
1

有做,在MVC的內置方式。順便說一下,非常簡單的方法。有很多選擇,請看this article by Phil Haack來檢查它們。其中之一是與字典。 Quesion.Id將是關鍵,答案將是價值

樣品:

首先,建立適當的ViewModels

public class AnswerQuestionViewModel 
    { 
     public Quesion Question { get; set; } 
     public string Answer { get; set; } 
    } 
    public class Quesion // 
    { 
     public int Id { get; set; } 
     // Maybe some other properties. 
    } 

裏面~/Views/Shared/EditorTemplates/,創建編輯器,將呈現編輯器。

@model Models.AnswerQuestionViewModel 

    @Html.HiddenFor(model => model.Question.Id) 
    @Html.EditorFor(model => model.Answer) 

而且~/Views/ControllerName/ActionName.cshtml

@model IEnumerable<ControllerInspectorTest.Models.AnswerQuestionViewModel> 
@using (Html.BeginForm()) 
{    
    @Html.EditorForModel(); 

    <p> 
     <input type="submit" value="Create" /> 
    </p>       
} 

而且當你創建動作後,參數將在

[HttpPost] 
public ActionResult AnswerQuestions(IEnumerable<AnswerQuestionViewModel> quesions) 
{ 
    // questions parameter is filled in correctly 
    //do save job; 
} 

注意填寫該質疑參數可以按類型的IListList