asp.net-mvc – 在ASP.NET MVC ViewModel类中获取数据?
|
对于那些在ASP.NET MVC中创建ViewModels(由类型化视图使用)的用户,您是否希望从ViewModel或控制器类中的服务/存储库中获取数据? 例如,我们开始使ViewModel基本上是DTO,并允许我们的控制器获取数据(严重过于简单的示例假定用户只能更改员工名称): public class EmployeeViewModel
{
public String Name; //posted back
public int Num; //posted back
public IEnumerable<Dependent> Dependents; //static
public IEnumerable<Spouse> Spouses; //static
}
public class EmployeeController()
{
...
public ActionResult Employee(int empNum)
{
Models.EmployeeViewModel model = new Models.EmployeeViewModel();
model.Name = _empSvc.FetchEmployee(empNum).Name;
model.Num = empNum;
model.Dependents = _peopleSvc.FetchDependentsForView(empNum);
model.Spouses = _peopleSvc.FetchDependentsForView(empNum);
return View(model);
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Employee(Models.EmployeeViewModel model)
{
if (!_empSvc.ValidateAndSaveName(model.Num,model.Name))
{
model.Dependents = _peopleSvc.FetchDependentsForView(model.Num);
model.Spouses = _peopleSvc.FetchDependentsForView(model.Num);
return View(model);
}
this.RedirectToAction(c => c.Index());
}
}
这一切似乎都很好,直到我们开始创建大量视图(40个字段),有许多下拉列表等.由于屏幕将具有GET和POST操作(如果出现验证错误,则POST返回视图),因此我们将复制代码并使ViewModels的大小应大于此值. 我认为替代方案是通过ViewModel中的服务获取数据.我担心的是,我们可以从ViewModel中收集一些数据,另外还有一些来自Controller的数据(例如,在上面的例子中,Name将从Controller中填充,因为它是一个已发布的值,而Dependents和Spouses将通过一些ViewModel中GetStaticData()函数的类型). 思考? 解决方法我遇到同样的问题.当代码对于动作方法来说太大时,我开始为每个动作创建类.是的,您将在类中进行一些数据检索,并在控制器方法中进行一些检索.另一种方法是将所有数据检索到类中,但是您将不会真正需要的一半类,它们将被创建以保持一致性,或者在控制器方法中进行所有数据检索,但是再一次,这些方法中的一些将会太复杂了,需要被抽象成类…所以选择你的毒药.我宁愿有一点不一致,并有正确的解决办法.至于将行为放入ViewModel中,我不这样认为,ViewModel的一个要点是从View中设置和提取值的一个薄类. 有一些我把转换方法放在ViewModel中的情况.例如,我需要将ViewModel转换为相应的实体,或者我需要使用实体的数据加载ViewModel. 为了回答你的问题,我更喜欢在controller / action方法中检索数据. 通常使用DropDowns,我创建一个下拉列表服务. DropDowns往往是与视图相同的数据.通过服务中的下拉菜单,我可以将其用于其他视图和/或缓存. 根据布局,40个字段可以创建一个混乱的视图.根据数据类型,我会尝试通过某种标签或向导界面将多个视图跨越多个视图. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 为什么只读文本框不会在ASP.NET中返回任何数据?
- asp.net-mvc – HttpContext和HttpContextWrapper之间的区别
- asp.net-web-api – 如何在ASP.NET 5和MVC 6中启用跨源请求
- asp.net-mvc-3 – 发布到列表MVC3
- asp.net – 双回发问题
- asp.net – 仅在本地IIS服务器上支持创建虚拟目录
- asp.net-mvc – 使用令牌认证访问Web Api的MVC .NET cookie
- jQuery Ajax方法调用 Asp.Net WebService 的详细实例代码
- asp.net-mvc-3 – MVC3未终止字符串常量语法错误
- asp.net-mvc – 在Azure Active Directory B2C中按组授权
- asp.net-mvc-3 – ASP.NET MVC重定向到没有物理重
- 用ADO.NET处理层次数据
- asp.net-mvc-2 – 抛出间歇性错误,“所需的防伪令
- asp.net-mvc – 具有html帮助的布尔隐藏和隐藏
- asp.net-mvc-3 – ASP.NET MVC 3控制器路由 – 使
- asp.net – 用户控件(ascx)和属性
- asp.net-mvc – DataAnnotations StringLength属
- asp.net-mvc-3 – Razor reseverd words
- ASP.NET MVC 2加载部分视图使用jQuery – 没有客
- asp.net-mvc – 为什么我的视图模型中的内部成员
