单个视图如何访问mvc3中的多个模型

时间:2012-03-20 03:36:20

标签: asp.net-mvc asp.net-mvc-3 razor

我正在开发MVC3中的应用程序。 基本上它是一个问题论坛,在问题页面上,用户将在末尾看到所有问题的链接和帖子评论框。当他点击问题链接时,他被移动到答案页面。现在答案页面正在使用另一个模型类而他们我无法获得答案类数据

我发现每个Controller都有一个视图和一个模型 但我希望我的观点可以访问多个模型,我不知道如何去做..

我试过了:

 public class MainClass
{
    public Question_Page question{ get; set; }
    public Answer_Page answer { get; set; }
} 
  public class Question_Page
{
   public virtual int Id { get; set; }
   public virtual string Question_name { get; set; }
   public virtual DateTime Created_Date { get; set; }
   public virtual DateTime Modified_Date { get; set; }
   public virtual int Created_By { get; set; }
   public virtual int Modified_By { get; set; }
   public virtual char Deleted { get; set; }
   public Question_Page()
   {
        this.Deleted='F';
   }
}

 public class Answer_Page
  {
    public virtual int Id { get; set; }
    public virtual string Answer { get; set; }
    public virtual DateTime Created_Date { get; set; }
    public virtual DateTime Modified_Date { get; set; }
    public virtual int Created_By { get; set; }
    public virtual int Modified_By { get; set; }
    public virtual char Deleted { get; set; }
    public virtual Question_Page Question { get; set; }
     public Answer_Page()
    {
        this.Deleted='F';
    }
}

现在在问题列表的视图中,我显示问题列表:

@model IEnumerable<Core.Model.MainPage>
@{
   ViewBag.Title = "Index";
 }
 <style type="text/css">
 ul
 {
   list-style-type: none;
 }
 </style>
 <h2>All Questions</h2>
 <hr />

 @using (Html.BeginForm("Index","Question",FormMethod.Post))
 {
  @Html.ValidationSummary(true)
  <ul>
   @foreach (var item in Model) 
  {

     <li>@Html.ActionLink(item.Question_name, "answer", new { Qry = item.Id })</li>
   }
   </ul>

  <label for="PostyourQuestion:">Post your Question:</label><br /><br />
  @Html.TextArea("textID")    
  <br />
  <input type="submit"/>
  }   

在做了这么多之后我就开始犯了错误:       @foreach(模型中的var项目)

这是我的控制者:

 public ActionResult Index()
    {
        return View(new StudentService().GetAllStudents());
    }
   [HttpPost]
    public ActionResult Index(Question_Page question,string textID)
    {         
        question.Question_name = textID;
        question.Created_Date = DateTime.Now;
        question.Modified_Date = DateTime.Now;
        question.Created_By = 101;
        question.Modified_By = 101; 
        new StudentService().SaveOrUpdateStudent(question);
        return View(new StudentService().GetAllStudents());
    }

StudentService是一个我定义方法的类GetAllStudents(),SaveOrUpdateStudent()

请帮帮我

4 个答案:

答案 0 :(得分:0)

我认为你的答案很简单?

@foreach (var item in Model) 

应该是

@foreach (var item in Model.Question_Page) 

您的模型是MainPage

你也可以在这里发布这个模型吗?

答案 1 :(得分:0)

假设GetAllStudents()返回IEnumerable<Student> 在你的控制器

return View(new StudentService().GetAllStudents());

发送给View的实际模型IEnumerable<Student>

如果您需要IEnumerable<Core.Model.MainPage>作为模型,只需从控制器返回适当的对象

IEnumerable<Core.Model.MainPage> model = //... define function that return Enumerable MainPage
return View(model);

答案 2 :(得分:0)

如果您想在不同的视图上使用相同的模型

    public ActionResult Index()
    {
        //I am assuming, You are returning IEnumerable<MainClass>
        List<MainClass> mainClass=new StudentService().GetAllStudents();
        if(mainClass==null)
            mainClass=new List<MainClass>(); //Incase you are not checking null value return
        return View(mainClass); //return a none null IEnumerable<MainClass> object
    }

    [HttpPost]
    public ActionResult Index(Question_Page question,string textID)
    {         
        question.Question_name = textID;
        question.Created_Date = DateTime.Now;
        question.Modified_Date = DateTime.Now;
        question.Created_By = 101;
        question.Modified_By = 101; 
        new StudentService().SaveOrUpdateStudent(question);
        return View(new StudentService().GetAllStudents());
    }

一旦您的第一个控制器方法有效,您将需要处理绑定模型,以便第二个方法工作。

答案 3 :(得分:0)

尝试viewModel。引用了所需模型的模型。因此,如果视图绑定到您的视图模型,则ViewModel中引用的所有模型也将被绑定。