0

我有一个控制器操作,它使用 PredicateBuilder 构建动态 linq 查询。我想将此查询的结果传递给部分视图。做这个的最好方式是什么?如果始终使用强类型视图是最佳实践,我传递给控制器​​操作的视图模型是否应该有一个可以将查询结果传递到的列表?或者这只是使用两个列表的额外开销?

这是控制器操作的简化版本:

[HttpPost]
public ActionResult BasicPropertySearch(BasicPropertySearchViewModel viewModel)
{
    var predicate = PredicateBuilder.True<ResidentialProperty>();
    if (ModelState.IsValid)
    {
        using(var db = new LetLordContext())
        {
            predicate = predicate.And(x => x.HasBackGarden);
            predicate = predicate.And(x => x.HasFrontGarden);
            predicate = predicate.And(x => x.HasSecureParking);
            predicate = predicate.And(x => x.IsDisabledFriendly);

            var results = db.ResidentialProperty.AsExpandable().Where(
            predicate).ToList();

            return PartialView("_BasicPropertySearchResultsPartial", results);
        }

    }
    ModelState.AddModelError("", "Something went wrong...");
    return View("_BasicPropertySearchPartial");
}

results如果传递给列表的视图不是强类型的,我如何在视图中访问?

4

2 回答 2

0

您应该尽可能使用强类型视图模型,但是您可以在局部视图中使用“动态”模型来访问您的数据。或者更常规地在控制器和视图中使用 Viewbag 动态对象来传递数据:

http://weblogs.asp.net/hajan/archive/2010/12/11/viewbag-dynamic-in-asp-net-mvc-3-rc-2.aspx

于 2013-04-02T18:58:02.123 回答
0

强类型视图是首选方法。您还可以通过 Viewbag 对象将数据传递给视图,并在视图本身中引用 Viewbag。

于 2013-04-02T18:59:12.487 回答