使用RenderPartial分配模型属性值

时间:2014-06-09 05:11:53

标签: c# asp.net-mvc model-binding

我是MVC平台的新手,并尝试使用一个简单的应用程序来掌握框架,

应用程序:我正在设计一个管理应用程序,它有一个输入问题的表单和数据库的多个选项,我有一个名为" QuestionViewModel"的视图模型。有财产" Quesiton"和一个OptionsViewModel列表," OptionViewModel"包括"选项"和#34; IsRightAnswer"属性,所以在UI上,我有一个QuestionView显示问题的文本框,我想要一个问题有4个选项,所以我创建了一个名为" QuestionOptionView"需要" OptionViewModel"作为它的模型, 现在我通过PartialView循环大约4次并显示一个TextBox for" Option"和#34; IsRightAsnwer"单选按钮,

UI显示TetsBox for" Question"和另外4个" TextBoxes"进入"选项", 但是当我发布这个表格时,"选项"不绑定到ViewModel

如何从这些partialview数据到主视图模型实现模型绑定?

public class QuestionViewModel
{
    [Display(Name = "Enter a question")]
    public string Question { get; set; }
    public IList<QuestionOptionViewModel> Options { get; set; }
    public int MaxOptions { get { return 4; } }

    public QuestionViewModel()
    {
        Options = new List<QuestionOptionViewModel>();
    }
}

public class QuestionOptionViewModel
{
    public string Option { get; set; }
    public bool IsRightAnswer { get; set; }
}
  

在我看来,我有如下,

    @using (Html.BeginRouteForm("savequestion", new {}, FormMethod.Post)){

    <div>
        @Html.LabelFor(m => m.Question)
        @Html.TextBoxFor(m => m.Question)
    </div>

    <p>Add options for the question</p>

    for (int i = 0; i < Model.MaxOptions; i++)
    {
        { Html.RenderPartial("QuestionOption", new Babbi_Test_admin.Models.QuestionOptionViewModel()); }
    }

    <input type="submit" value="Save" />

提交表单时,我的帖子方法为

    [HttpPost]
    public void SaveQuestion(QuestionViewModel viewModel)
    {

    }
  

帖子中的我的viewModel有&#34;选项&#34;为null

2 个答案:

答案 0 :(得分:0)

这种情况正在发生,因为您必须将QuestionViewModel与Controller的Action绑定,而是需要创建一个具有QuestionViewModel OptionViewModel

的ViewModel

错误

[HttpPost]
public void SaveQuestion(QuestionViewModel viewModel)
{

}

在帖子方法中,您期待QuestionViewModel那么您如何获得OptionviewModel

你的另一件事是QuestionOptionViewModel的Renbdering Partial View包含了Options和RIght Answer所以在循环中你会得到正确的答案4这是不正确的。

<强>示例

public class QuestionViewModel
{
   //Properties
}
public class OptionViewModel
{
   //Properties
}

public class QuestionAndOptionViewmodel
{
  // QuestionViewModel and OptionViewModel model object
  //Constructors
  //Methods
}

[HttpPost]
public void SaveQuestion(QuestionAndOptionViewmodel viewModel)
{
    //Your Code Here;
}

答案 1 :(得分:0)

尝试将代码更改为:

for (int i = 0; i < Model.MaxOptions; i++)
    {
        { Html.RenderPartial("QuestionOption", Model.Options.Item(i)); }
    }

甚至更好:

foreach(option in Model.Options)
{
   Html.RenderPartial("QuestionOption", option);
}

您需要在问题模型构造函数

中初始化选项值