MVC绑定数据

时间:2011-09-08 13:51:17

标签: asp.net-mvc

我有一个MVC项目。

我在数据库中有问题,希望我的用户回答。我把它们放在数据库中因为它们需要能够是动态的。用户需要为每个问题提交答案。因此,当显示视图时,它会显示每个问题的问题和文本框。

想要在@ Html.textBox(“Question1”)等问题中进行硬编码时,最好的方法是什么?

  1. 问题1 [ __ textbox1 ___ ]
  2. 问题2 [ __ textbox2 ___ ]
  3. ......等等。

2 个答案:

答案 0 :(得分: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)
}

另外,您可以创建一个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 :(得分: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