Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC部分视图模型绑定_C#_Asp.net_Asp.net Mvc_Partial Views_Model Binding - Fatal编程技术网

C# ASP.NET MVC部分视图模型绑定

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 {

我是ASP.NETMVC的新手,我正在做一个小测验应用程序项目。然而,我遇到了一个相当恼人的问题

现在我有一些模型,有问题、选项和测验。测验连接到一个表单。我在表单中使用局部视图来显示每个问题,在问题中我使用另一个局部视图来显示选项

每当我试图从表单中得到答案时,我都会得到0和null。我试过很多东西,但都不管用

这是我的课

选择

    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)