2012-07-06 53 views
1

我正在使用C#MVC和Razor。MVC ViewModel类

说如果我有一个显示列表,下拉列表和2个文本框的视图。 所有这些信息应该保存在一个类中,然后传递给我的观点?

+4

这真的取决于数据是什么。如果所有组件中的数据是密切相关的 - 例如,对于同一领域的不同子领域 - 比是肯定的,最好将它们全部放在一个班级中。 – 2012-07-06 21:47:11

回答

1

我无法从你的控制器将数据传递到强调不够用的ViewModels的重要性视图。正如你的问题所述,你已经这样做了,这是一个很好的开始!

所以..这就是我该怎么做的。

public class IndexViewModel // or DetailsViewModel or whatever the Action Method is 
{ 
    public IEnumerable<Foo> Foos { get; set; } 
    public SelectList DropDownBox { get; set; } 
    public string Name { get; set; } // Textbox 1 
    public string Description { get; set; } // Textbox 2 
} 

好的。所以让我们看看我做了什么。

我已经通过了View要求的所有信息。没有更多,没有更多。只是-exact-信息。

Foosfoo的列表,然后您可以循环显示。 (专业小贴士:使用DisplayTemplates渲染自定义类型/自定义类型的集合)。

我也建议在传递SelectList这是下拉内容等。有些人不喜欢这(这是很好)。相反,他们传递他们的项目集合在下拉列表中呈现,但我个人觉得这太漏洞了。我们有ViewModels的关键原因是我们可以测试这些东西。

最后,每个文本框都有一个属性。

所以总之,我把所有的信息放在一个ViewModel。该视图模型可以包含其他类(通过属性公开)。但是是的 - 你想要一个VIEWMODEL PER VIEW

HTH :)

0

那么从我已经完成的项目中,我会建议将所有信息保存在一个类中,但这一切都取决于数据,正如Idan Arye所述,您正在使用。从你所问的我会建议看一下MSDN,这是C#的好资源。希望这有助于

0

这取决于有多大将是你的模型,但是是你可以让他们在一个班

对于例如如果像Employee一样简单,如下所示,然后将其保留在一个类中。但是,如果更大然后这个和它的3倍-4具有更为复杂的数据字段然后尝试让他们在不同的班级

public class EmployeeController : Controller 
{ 
    public ActionResult Index() 
    { 
     var employeeModel = new Employee 
     { 
      FirstName = "Hat", 
      LastName = "Soft", 
      Departments = new BindingList<SelectListItem> 
      { 
       new SelectListItem {Text = "Accounts", Value = "1"}, 
       new SelectListItem {Text = "Human Resource", Value = "2"}, 
       new SelectListItem {Text = "Operations", Value = "3"} 
      } 
     }; 

     return View(employeeModel); 
    } 
} 
0

也许你实际上是在问我应该使用视图模型?

到类似... Should I use a view model for just two objects?

恕我直言视图模型与MVC和剃刀工作时往往是一个不错的选择。

最终取决于你,决定取决于你的模型和其他因素。例如,如果视图所需的位最终来源于模型中的不同实体,那么可能会认为答案是肯定的,并且应考虑使用视图模型,因为可以根据您的视图对单个视图模型进行定制。

基本查看模型可以帮助保持您的意见清洁。通常考虑的主要含义是映射域实体查看模型和其他方式(例如在GET或POST期间)所需的必然映射逻辑。 AutoMapper是一个可以用来减少映射代码的库的示例。根据我的经验,只要您的映射逻辑不是非常复杂,就可以很好地工作。

0

在我看来,取决于页面是什么,如果你要显示的域对象的属性,在这种情况下,你应该考虑有一个特殊的对象的视图(如视图模型)你的类将域的对象类(例如用户)和某些时候你的视图模型(例如UserViewModel)。

当然,您也可以使用Value Objects/DTO来携带复合对象,因此,您必须创建与域无关但仍然需要在您的系统中传输数据的通信类DAL给你的意见。

最后,您将始终需要一个视图模型类,它将与域对象或自定义的DTO /值对象相对应,以在视图中显示数据。

希望这会有所帮助。