C# 需要MVC3剃须刀帮助

C# 需要MVC3剃须刀帮助,c#,asp.net-mvc-3,razor,C#,Asp.net Mvc 3,Razor,我希望你们能回答我一个问题 我刚刚开始使用ASP.NET MVC3,但在某一点上还没有成功。我从书本上学到了这些东西,我对一些事情有点不确定 一个视图只能有一个@Model引用吗 目前,我有一个在ViewResult上使用HTTP-POST的视图设置,它验证视图中由用户输入的数据,然后“在POST上”将此信息传递给一个方法,该方法将其写回数据库(ADO.NET-Access)。现在我需要更改我的视图,这样我就可以为DropDownList控件替换几个文本框。填充这些控件的数据需要从数据库传入 我

我希望你们能回答我一个问题

我刚刚开始使用ASP.NET MVC3,但在某一点上还没有成功。我从书本上学到了这些东西,我对一些事情有点不确定

一个视图只能有一个@Model引用吗

目前,我有一个在ViewResult上使用HTTP-POST的视图设置,它验证视图中由用户输入的数据,然后“在POST上”将此信息传递给一个方法,该方法将其写回数据库(ADO.NET-Access)。现在我需要更改我的视图,这样我就可以为DropDownList控件替换几个文本框。填充这些控件的数据需要从数据库传入

我说的这些数据需要在页面的HTTP-GET Viewresult中传递是否正确?如果是,我可以在同一个视图(*.cshtml)中引用多个@Model吗

我有一个接受用户响应的类,它在视图中被引用。但是我需要为dropdownlist数据创建一个新类并引用它。因此,在后台,我将数据填充到SelectListItem中,将其传递给视图,然后填充视图中的每个下拉控件


很抱歉,如果这篇文章写得不好,很难解释,我觉得从书本上学习很难,我现在很困。任何帮助都将不胜感激。只是为了让我了解这一切是如何发生的。我对C#语法很熟悉,但对MVC3非常不确定

有两种方法可以解决这个问题

  • 使用视图模型
在本场景中,您有一个类,其中包含您的数据模型以及视图所需的其他内容,因此如下所示:

public class ViewModel
{
    public MyDomainModel Model { get; set; }
    public IEnumerable<SelectListItem> SelectListItems { get; set; }
}
ViewBag.SelectListItems = new SelectListItem[] { ... };
然后可以在视图本身中引用

@Html.DropDownList("myselectlist", ViewBag.SelectListItems)

有两种方法可以处理这个问题

  • 使用视图模型
在本场景中,您有一个类,其中包含您的数据模型以及视图所需的其他内容,因此如下所示:

public class ViewModel
{
    public MyDomainModel Model { get; set; }
    public IEnumerable<SelectListItem> SelectListItems { get; set; }
}
ViewBag.SelectListItems = new SelectListItem[] { ... };
然后可以在视图本身中引用

@Html.DropDownList("myselectlist", ViewBag.SelectListItems)

我想这会对你有帮助。它确实帮助了我

我想这会对你有所帮助。它确实帮助了我

因此,我可以使用视图包存储多种类型的数据。如果我需要两个dropdownlists,一个过滤器从另一个,我可以分配两组数据到视图包,在不同的名称下。我没有遇到视图模型,我一定会仔细阅读它们!老实说,在MVC中使用ViewBag不是很好的实践。ViewModel是一个非常非常好的解决方案。@Derek是的,没错。ViewBag实际上是一个动态类型对象;所以你可以把它当作一本字典,把不同类型的对象放在里面。太棒了!谢谢你的帮助,我已经阅读了ViewBag,但从未考虑过它。那么,我认为每个视图只能引用一个模型是正确的吗?因此,我可以使用视图包存储多种类型的数据。如果我需要两个dropdownlists,一个过滤器从另一个,我可以分配两组数据到视图包,在不同的名称下。我没有遇到视图模型,我一定会仔细阅读它们!老实说,在MVC中使用ViewBag不是很好的实践。ViewModel是一个非常非常好的解决方案。@Derek是的,没错。ViewBag实际上是一个动态类型对象;所以你可以把它当作一本字典,把不同类型的对象放在里面。太棒了!谢谢你的帮助,我已经阅读了ViewBag,但从未考虑过它。因此,我认为每个视图只能引用一个模型,对吗?