ASP.NET MVC Partiel视图模型绑定

罗迪

我对ASP.NET MVC还是很陌生,并且正在从事一个小型测验应用程序项目。但是,我遇到了一个相当烦人的问题。

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

每当我尝试从表单中获得哪些答案时,我都会得到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; }
    }
}

测验

    public class Quiz
{
    public int Id { get; set; }
    public IList<Question> questions = new List<Question>();
    public string Name { get; set; }

    public IList<Question> Questions
    {
        get { return questions; }
        set { questions = value; }
    }
}

我的控制器。总是将'zzz'设置为null和0。

    [HttpPost]
    public ActionResult Grade(Quiz zzz)
    {
        var grade = quizService.Grade(zzz);
        return View(grade);
    }

观点。我以前没有ViewDataDictionary,但是那也给了null。我将其更改为ViewDataDictionary,但仍返回null。

注意:我确实添加了注释,但它们不在实际代码中

发布

@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" />
}

问题

@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>

最后选择偏视图

@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.Question.OrderNumber它必须是列表中的实际索引。

或者,如果您按照以下方式创建视图Views\Shared\EditorTemplates\Question.cshtml

@model Namespace.To.Question

@Html.HiddenFor(m => m.Id)
...

然后,在您看来,您可以简单地执行以下操作:

@Html.EditorFor(m => m.Questions)

并且Razor将为中的每个项目渲染该编辑器模板Questions,所有模板都正确加上前缀。冲洗并与您的其他课程重复,例如Choice等等。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ASP.NET MVC绑定到视图模型

来自分类Dev

ASP.NET MVC 5模型绑定编辑视图

来自分类Dev

包含2个域模型的ASP.NET Core MVC绑定视图模型

来自分类Dev

Asp.net- Mvc复杂模型绑定

来自分类Dev

ASP.NET MVC视图模型呈现

来自分类Dev

ASP.NET MVC视图模型呈现

来自分类Dev

ASP.NET MVC:动作未将jQuery ajax发送的值绑定到视图模型

来自分类Dev

ASP.NET MVC 4 JSON绑定到视图模型-嵌套对象错误

来自分类Dev

ASP.NET MVC无法发布绑定到复选框的视图模型

来自分类Dev

Asp.net MVC数据模型或视图模型

来自分类Dev

Json和ASP.NET MVC模型绑定

来自分类Dev

使用GET的ASP.Net MVC模型绑定复杂对象

来自分类Dev

$ http发布不与asp.net MVC模型绑定

来自分类Dev

ASP.NET MVC中的问题模型绑定嵌套列表

来自分类Dev

JSON的ASP.NET MVC 4递归模型绑定

来自分类Dev

ASP.NET MVC 5模型绑定不起作用

来自分类Dev

绑定[Serializable]类的ASP.Net MVC模型

来自分类Dev

ASP.NET MVC模型绑定派生类

来自分类Dev

ASP.NET MVC 5模型绑定列表为空

来自分类Dev

ASP.NET Core 3 MVC:对象列表的模型绑定

来自分类Dev

什么是ASP.NET MVC中的模型绑定?

来自分类Dev

ASP.NET MVC模型绑定未解析

来自分类Dev

ASP.NET MVC中的问题模型绑定嵌套列表

来自分类Dev

ASP.NET MVC:模型绑定中的类型转换

来自分类Dev

ASP.Net MVC模型绑定程序-忽略属性

来自分类Dev

ASP.NET MVC模型绑定资源序列

来自分类Dev

ASP.NET MVC模型绑定派生类

来自分类Dev

ASP.Net MVC 6 PartialView模型绑定混乱

来自分类Dev

ASP.Net MVC模型绑定IEnumerable失败