我有一個MVC項目。MVC綁定數據
我在數據庫中有問題,我希望我的用戶回答。我有他們在數據庫中,因爲他們需要能夠動態。用戶需要提交每個問題的答案。所以當視圖顯示時,它會顯示每個問題的問題和文本框。
以何種手段去這樣做,因爲我不要像@ Html.textBox(「問題1」)等
- 問題1 在提問硬編碼__的最佳方式TextBox1中 ___]
- 問題2 [__ TextBox2中 ___]
...等
我有一個MVC項目。MVC綁定數據
我在數據庫中有問題,我希望我的用戶回答。我有他們在數據庫中,因爲他們需要能夠動態。用戶需要提交每個問題的答案。所以當視圖顯示時,它會顯示每個問題的問題和文本框。
以何種手段去這樣做,因爲我不要像@ Html.textBox(「問題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)
有做,在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;
}
注意填寫該質疑參數可以按類型的IList
或List
太