2012-07-03 57 views
0

我希望你们能回答我一个问题吗?我刚刚开始使用ASP.NET MVC3在某个时刻已经脱臼了。我一直在从书本上学习这些东西,并且我对一些事情略有不确定性。MVC3剃刀需要帮助

VIEW可以只有一个@Model引用吗?

目前,我在ViewResult上使用HTTP-POST进行VIEW设置,验证View中的数据,由用户输入,然后“在发布”,将此信息传递给将其写回的方法到数据库(ADO.NET - Access)。现在我需要更改我的VIEW,以便我可以替换Dropdownlistfor控件的几个文本框。要填充这些控件的数据将需要从数据库传入。

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

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

对不起,如果这是写得不好,很难解释,我觉得从书上学习努力,我现在很坚持。任何帮助,将不胜感激。只是为了让我了解这一切如何绕过。我对C#语法感到满意,但很不确定MVC3!

回答

2

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

  • 使用视图模型。

在这种情况下,你必须包含您的数据模型以及由视图所需要的其他东西,所以像这样的类:

public class ViewModel 
{ 
    public MyDomainModel Model { get; set; } 
    public IEnumerable<SelectListItem> SelectListItems { get; set; } 
} 
  • 使用ViewBag

在这种情况下,你都添加额外的进ViewBag字典。因此,在控制器,你就必须像这样的东西:

ViewBag.SelectListItems = new SelectListItem[] { ... }; 

然后你就可以在视图本身

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

你刚刚打了我一分钟! –

+0

所以,我可以使用视图包来存储多种类型的数据。如果我需要两个下拉列表和一个过滤器,我可以将两组数据分配到View包中,名称不同。我还没有遇到View Models,我一定会阅读它们! – Derek

+1

说实话 - 在MVC中使用ViewBag并不是好习惯。 ViewModel是更好的解决方案。 –

1

我认为这将帮助你pluralsight mvc3 intro引用。它肯定帮了我

+0

感谢这个,这个链接看起来很理想,现在就来学习吧! – Derek