【发布时间】:2014-04-09 13:38:14
【问题描述】:
基本上我必须在一个类文件中为我的类创建一个 ParentView,因为我试图在一个 cshtml 文件中使用这两个类。
@model JavaTutorial.Models.ParentView
@{
ViewBag.Quiz = "Details";
}
<h2>Details</h2>
<h2>Quiz: @Model.Quiz.Title</h2>
@if (Model.Quiz.Title == "IF Statements")
{
<h2>Quiz 24</h2>
using (Html.BeginForm())
{
@Html.EditorFor(x => x.Evaluation.Questions)
<input type="submit" />
}
问题是当我运行它时,我现在得到以下信息:
“/”应用程序中的服务器错误。
传入字典的模型项是类型 'JavaTutorial.Models.Quiz',但是这个字典需要一个模型项 'JavaTutorial.Models.ParentView' 类型。
描述:执行过程中发生了未处理的异常 当前的网络请求。请查看堆栈跟踪以获取更多信息 有关错误的信息以及它在代码中的来源。
异常详细信息:System.InvalidOperationException:模型项 传入字典的类型是“JavaTutorial.Models.Quiz”,但是 这个字典需要一个类型的模型项 'JavaTutorial.Models.ParentView'。
来源错误:
在执行过程中产生了一个未处理的异常 当前的网络请求。有关原产地和位置的信息 可以使用下面的异常堆栈跟踪来识别异常。
我希望在单击“IF 语句”链接时调用我的评估方法。也许有更简单的方法来做到这一点?
控制器:
public ActionResult Details(int id)
{
var quiz = storeDB.Quizzes.Find(id);
return View(quiz);
}
public ActionResult Test()
{
var evalVM = new Evaluation();
//the below is hardcoded for DEMO. you may get the data from some
//other place and set the questions and answers
var q1 = new Question { ID = 1, QuestionText = "What is your favourite language" };
q1.Answers.Add(new Answer { ID = 12, AnswerText = "PHP" });
q1.Answers.Add(new Answer { ID = 13, AnswerText = "ASP.NET" });
q1.Answers.Add(new Answer { ID = 14, AnswerText = "Java" });
evalVM.Questions.Add(q1);
var q2 = new Question { ID = 2, QuestionText = "What is your favourite DB" };
q2.Answers.Add(new Answer { ID = 16, AnswerText = "SQL Server" });
q2.Answers.Add(new Answer { ID = 17, AnswerText = "MySQL" });
q2.Answers.Add(new Answer { ID = 18, AnswerText = "Oracle" });
evalVM.Questions.Add(q2);
return View(evalVM);
}
[HttpPost]
public ActionResult Test(Evaluation model)
{
if (ModelState.IsValid)
{
foreach (var q in model.Questions)
{
var qId = q.ID;
var selectedAnswer = q.SelectedAnswer;
// Save the data
}
return RedirectToAction("ThankYou"); //PRG Pattern
}
//reload questions
return View(model);
}
课堂测验.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;
using System.ComponentModel.DataAnnotations;
namespace JavaTutorial.Models
{
public class Quiz
{
[Key]
public int QuizId { get; set; }
public string Title { get; set; }
public int difficulty { get; set; }
public string description { get; set; }
public Genre Genre { get; set; }
}
public class Question
{
public int ID { set; get; }
public string QuestionText { set; get; }
public List<Answer> Answers { set; get; }
[Required]
public string SelectedAnswer { set; get; }
public Question()
{
Answers = new List<Answer>();
}
}
public class Answer
{
public int ID { set; get; }
public string AnswerText { set; get; }
}
public class Evaluation
{
public List<Question> Questions { set; get; }
public Evaluation()
{
Questions = new List<Question>();
}
}
public class ParentView
{
public Quiz Quiz { get; set; }
public Question Question { get; set; }
public Answer Answer { get; set; }
public Evaluation Evaluation{ get; set; }
}
}
【问题讨论】:
-
我们可以看看您的控制器操作代码吗?
-
@Oliver 在其中添加。只是在控制器上,细节处理测验类,然后测试与评估/问题/答案类一起工作。
-
@user3055450 使用视图模型将 2 个模型合并为一个。然后在视图中调用该视图模型
标签: c# asp.net-mvc asp.net-mvc-4 razor