在我的主页(索引)页面上,我有两个部分,一个呈现搜索表单,另一个呈现搜索结果:
<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
在
如果是这样,这是否意味着这是一个路由问题?
最后,我认为构造函数中的new
ingSearchResults
会克服NullReferenceExceptions
?
反馈表示赞赏。