首先交时间,

我已经用MVC升技玩弄......我有一个具有多个输入字段,这些域中的一些可以在空白的后视图。

控制器为后内部的动作方法看起来是这样的

public ActionResult Filter(int? id, string firstName, string lastName, bool? isMember)

我已经使用的DynamicQuery扩展,它是为了在我的数据库执行动态的LINQ querys被踢周围,我已经包封在此被传递给用于execusion数据访问层一个搜索对象

然而,我也有被传递回视图用于显示输入值和查询的结果定制的ViewData对象。

这一切看起来有点坏坏的代码,因为我同时设置搜索对象的属性和ViewDatas。

public ActionResult Filter(int? id, string firstName, string lastName, bool? isMember)  { 
var search = new Search { 
Id = id, 
FirstName = firstName, 
LastName = lastName, 
Member =  isMember 
}; 

var memberViewData = new MemberViewData { 
Id = id, 
FirstName = firstName, 
LastName = lastName, 
Member =  isMember
}; 

memberViewData.Results = _dataRepository.GetMember(search); 

return View("Search", memberViewData); 

}

我是在想这真的应该只值传递给数据访问层和控制器填充ViewData的,或者是有一个更优雅的图案或实践,我可以用?

很抱歉,如果这似乎倾倒,而不是配发的人互相激荡想法,和时间挖成的框架。

有帮助吗?

解决方案

根据您的片段MemberViewData类具有除了搜索类的属性results属性。所以第一步是使MemberViewData从搜索中获得,并定义接受搜索实例作为参数,并给它分配的从它的基本属性的构造函数。接着我想改变操作方法如下所示:

public ActionResult Filter(Search search)  
{ 
    return View("Search", new MemberViewData(search) 
    {
        Results = _dataRepository.GetMember(search)
    }); 
}

其他提示

使用ModelBinder的结合数据

像塔德乌什提到的,ModelBinder的能够帮助建立MemberViewData对你来说,这将只留下其结果是牵强。

您也可以决定创造一个了解如何构建这种观点的数据对象和直接委托给它的演示服务。我宁愿模型绑定方式虽然这里。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top