0

在我的主页(索引)页面上,我有两个部分,一个呈现搜索表单,另一个呈现搜索结果:

<div class="row-fluid well">
    <div class="span6">
        @Html.Partial("~/Views/Search/_BasicPropertySearchPartial.cshtml")
    </div>
    <div class="span6" id="basic-property-search-results">
        @Html.Partial("~/Views/Search/_BasicPropertySearchResultsPartial.cshtml")
    </div>
</div>

在我SearchController的 GET 操作中返回搜索表单:

[HttpGet]
public ActionResult BasicPropertySearch()
{
    return PartialView("_BasicPropertySearchPartial");
}

POST 操作从表单中获取用户输入并根据查询返回结果:

[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);
            //...
            var results = db.ResidentialProperty.AsExpandable().Where(predicate).ToList();

            GenericSearchResultsViewModel<ResidentialProperty> gsvm = 
                    new GenericSearchResultsViewModel<ResidentialProperty> { SearchResults = results };

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

我创建了一个通用视图模型,因为搜索结果可能是不同类型的列表:

public class GenericSearchResultsViewModel<T>
{
    public List<T> SearchResults { get; set; }

    public GenericSearchResultsViewModel()
    {
        this.SearchResults = new List<T>();
    }
}

POST 操作返回以下视图:

@model LetLord.ViewModels.GenericSearchResultsViewModel<LetLord.Models.ResidentialProperty>

@if (Model.SearchResults == null) // NullReferenceException here!
{
    <p>No results in list...</p>
}
else
{
    foreach (var result in Model.SearchResults)
    {
    <div>
        @result.Address.Line1
    </div>
    }
}

我已经在 GET 和 POST 操作上设置了断点,并且在其中一个或命中之前抛出了异常。

这个问题是因为index.cshtml在它有机会SearchController

如果是这样,这是否意味着这是一个路由问题?

最后,我认为构造函数中的newingSearchResults会克服NullReferenceExceptions

反馈表示赞赏。

4

1 回答 1

1

似乎整体Model是空的。您需要为Html.Partial调用提供部分视图模型,或者使用Html.Action操作和控制器名称来调用两个控制器(子)操作。

有关详细信息,请参阅MSDN

于 2013-04-03T19:06:49.800 回答