C# ASP.NET MVC部分视图模型绑定
我是ASP.NETMVC的新手,我正在做一个小测验应用程序项目。然而,我遇到了一个相当恼人的问题 现在我有一些模型,有问题、选项和测验。测验连接到一个表单。我在表单中使用局部视图来显示每个问题,在问题中我使用另一个局部视图来显示选项 每当我试图从表单中得到答案时,我都会得到0和null。我试过很多东西,但都不管用 这是我的课 选择C# ASP.NET MVC部分视图模型绑定,c#,asp.net,asp.net-mvc,partial-views,model-binding,C#,Asp.net,Asp.net Mvc,Partial Views,Model Binding,我是ASP.NETMVC的新手,我正在做一个小测验应用程序项目。然而,我遇到了一个相当恼人的问题 现在我有一些模型,有问题、选项和测验。测验连接到一个表单。我在表单中使用局部视图来显示每个问题,在问题中我使用另一个局部视图来显示选项 每当我试图从表单中得到答案时,我都会得到0和null。我试过很多东西,但都不管用 这是我的课 选择 public class Choice { public int Id { get; set; } public string Text {
public class Choice
{
public int Id { get; set; }
public string Text { get; set; }
public bool IsAnswer { get; set; }
private Question question = new Question();
public bool IsSelected { get; set; }
public Question Question
{
get { return question; }
set { question = value; }
}
}
问题:
public class Question
{
public int Id { get; set; }
private IList<Choice> choices = new List<Choice>();
public string Text { get; set; }
public int OrderNumber { get; set; }
public IList<Choice> Choices
{
get { return choices; }
set { choices = value; }
}
}
@model QuizApp.Models.Question
<div class="question">
@Html.Hidden("Quiz.Questions[" + Model.OrderNumber + "].Id", Model.Id)
//Shows the question
<b>@Model.Text </b><br/>
//Adds choices to the question
@foreach (var choice in Model.Choices)
{
@Html.Partial("_Choice", choice, new ViewDataDictionary()
{
TemplateInfo = new TemplateInfo()
{ HtmlFieldPrefix = "Choices" }
});
}
</div>
这些观点。我以前没有ViewDataDictionary,但它也会提供空值。我将其更改为ViewDataDictionary,但它仍然返回空值
注意:我现在添加了注释,它们不在实际代码中
发表
@model QuizApp.Models.Quiz
@{ ViewBag.Title = "Publish";}
@Html.Hidden("Id", Model.Id)
@using (Html.BeginForm("Grade","Quiz", FormMethod.Post))
{
foreach (var question in Model.Questions){
@Html.Partial("_Question", question, new ViewDataDictionary(){
TemplateInfo = new TemplateInfo()
{ HtmlFieldPrefix = "Questions" }
});
}
<input type="submit" value="Vesturen" />
}
有人看到我的问题的解决方案了吗,或者找到了解决办法?我是不是做错了什么,我显然不知道?我不明白为什么它总是给我空值,因为据我所知,它现在应该可以工作了。以下方法可以工作:
for (var i = 0; i < Model.Questions.Count(); i++){
@Html.Partial("_Question", question, new ViewDataDictionary(){
TemplateInfo = new TemplateInfo()
{ HtmlFieldPrefix = "Questions[" + i.ToString() + "]" }
});
}
然后,在您看来,您可以简单地执行以下操作:
@Html.EditorFor(m => m.Questions)
Razor将为
问题
中的每个项目呈现编辑器模板,所有项目都正确地加上前缀。冲洗并重复你的其他课程,如Choice
,等等。谢谢,效果不错!你给出的备选方案听起来容易多了,将来我可能会在需要做类似事情时这样做。
@model QuizApp.Models.Choice
@Html.RadioButton("Quiz.Questions[" + Model.Question.OrderNumber + "].Choices[0].Id", Model.Id)
@Model.Text
for (var i = 0; i < Model.Questions.Count(); i++){
@Html.Partial("_Question", question, new ViewDataDictionary(){
TemplateInfo = new TemplateInfo()
{ HtmlFieldPrefix = "Questions[" + i.ToString() + "]" }
});
}
@model Namespace.To.Question
@Html.HiddenFor(m => m.Id)
...
@Html.EditorFor(m => m.Questions)