我有一个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
太