leo*_*ora 6 data-binding asp.net-mvc
我看到asp.net mvc 2有强烈的输入帮助,并且最初看它的工作方式我认为也许我在asp.net mvc 1中做错了数据绑定以呈现视图并回发到控制器.
我经常有不同的对象来渲染视图并回发到控制器.这是错的?这似乎很自然,因为在渲染视图时,您经常会有一个包含下拉列表等的视图模型,但对于您的发布,您只需要回发所需的属性.
例如,在渲染的过程中,我的viewmodel可能看起来像这样
public class PersonViewModel
{
public int Age;
public string FIrst;
public JobCategory[] JobCategories;
public Sport[] Sports;
public int NumberOfChildren;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,jobCategories和Sports将用于填充下拉框. NumberOfchildren将只是html放入,我不希望它可编辑.当我想发布我只想传回一个苗条的对象只有发布的属性,所以我有另一个对象
public class PersonUpdater
{
public int Age;
public string FIrst;
public int JobCategoryId;
}
Run Code Online (Sandbox Code Playgroud)
这些是我需要传回的唯一属性,所以我的控制器将如下所示:
public ActionResult Update(PersonUpdater personUpdater)
{
_repository.UpdateModel(personUpdater).
}
Run Code Online (Sandbox Code Playgroud)
所以,鉴于上述情况,假设强类型辅助方法(如下所示)似乎对方法有用,但如果您引用不同的属性,则可能会导致回发到服务器的问题.
http://weblogs.asp.net/scottgu/archive/2010/01/10/asp-net-mvc-2-strongly-typed-html-helpers.aspx
有什么想法吗?
真正的问题是 - 当前接受的方法忽略了视图模型的SRP - 编辑形式同时充当输入和输出.
人们还没有接受view model,正如我所说的那样,input view model并且output view model(对于许多人来说 - 甚至创建view model层太多了).因此 - Mvc2目前缺乏对此的支持(你不应该同时具有非输入和输出的强类型视图)主要是因为模糊和缺乏广泛接受的方法.
但我确实认为,在更深入并view model分成其中两个时,有一个好处(好吧......这实际上是一种权衡).如果这个想法能够发展并最终被广泛接受,我也不会感到惊讶.
实际上 - 目前的方法甚至有一个名字 - Thunderdome原则.如果杰里米·D·米勒(Jeremy D. Miller)这样的人说这是正确的话,那么社区就不会费心去寻找其他任何东西.
从实际角度来看 - 您可以通过提供正确的元数据来缓解一些问题(您可能希望查看流畅的模型元数据提供程序).
| 归档时间: |
|
| 查看次数: |
742 次 |
| 最近记录: |