0

第一次发帖时间,

我一直在玩 MVC... 我有一个有多个输入字段的视图,其中一些字段在发布时可能是空白的。

帖子控制器内部的操作方法看起来像这样

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

我一直在使用一直在使用的 DynamicQuery 扩展,以便在我的数据库上执行动态 Linq 查询,我已经将它封装在一个 Search 对象中,该对象传递给数据访问层以供执行。

但是,我还有一个自定义的 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,还是我可以使用更优雅的模式或实践?

抱歉,如果这看起来很垃圾,没有分配人来反弹想法并有时间深入研究框架。

4

3 回答 3

2

使用modelbinder绑定数据

于 2009-05-19T19:33:03.747 回答
1

根据您的代码片段 MemberViewData 类除了 Search 类的属性之外还具有 Results 属性。所以第一步是让 MemberViewData 从 Search 派生并定义一个接受 Search 实例作为参数的构造函数并从中分配它的基本属性。接下来,我将像这样更改操作方法:

public ActionResult Filter(Search search)  
{ 
    return View("Search", new MemberViewData(search) 
    {
        Results = _dataRepository.GetMember(search)
    }); 
}
于 2009-05-19T19:41:28.613 回答
0

就像 Tadeusz 提到的那样,ModelBinder 可以帮助您构建 MemberViewData,这将只留下要获取的结果。

您还可以决定创建一个表示服务,该服务了解如何构建此视图数据对象并简单地委托给它。不过,我更喜欢这里的模型绑定方法。

于 2009-05-19T19:38:01.990 回答