我是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
答案 0 :(得分:0)
这种情况正在发生,因为您必须将QuestionViewModel与Controller的Action绑定,而是需要创建一个具有QuestionViewModel
OptionViewModel
错误强>
[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);
}
您需要在问题模型构造函数
中初始化选项值