我正在尝试对我的结果页面进行排序(这是在过滤页面之外的另一个视图中)。我遇到了这个奇怪的问题,我不明白为什么不断发生在我身上。
所有以非常短的形式提供的代码,如果您需要我的代码的任何其他部分以获取更多信息,请询问我。
我的索引视图(用户过滤结果的地方):
@model IEnumerable<Cars.Models.CarSearch>
@using (Html.BeginForm("SearchResult", "Home", FormMethod.Post,
new
{
id = "CategoryFormID",
data_modelListAction = @Url.Action("ModelList"),
data_makeListAction = @Url.Action("MakeList"),
data_editionListAction = @Url.Action("EditionList")
}))
{
<label>Make</label>
<select id="MakeID" name="carMake">
<option>All Makes</option>
</select>
}
我的搜索结果视图:
@model IEnumerable<Cars.Models.Car>
<a href="@Url.Action("SearchResult", "Home", new { sortOrder= "Make", filters = ViewBag.CurrentFilters})">Make</a>
我的模型:
public class Car
{
public String Make { get; set; } //is my table model
}
public class CarFilter {
public String carMake { get; set; }
}
public class CarSearch {
public CarFilter CarFilter { get; set; }
public byte PageSize { get; set; }
public short PageNumber { get; set; }
public int TotalRows { get; set; }
}
我的控制器:
public ActionResult SearchResult(String sortOrder, CarFilter filters)
{
ViewBag.CurrentFilters = filters;
return View();
}
我要做的就是从 Index 获取 carMake 以 CarFilter 形式将其发布到控制器(因为在我的代码中,表单中有很多字段,我不想把它们全部写下来)当用户点击排序方式 Make it GET SearchResult 方法,它应该设置filters = ViewBag.CurrentFilters
用户从一开始输入的值。
Now the funny part is, when I replace CarFilter filters
with String carMake
and other places respectively. It works like a charm.
My question:
Why?
How can I do this with
CarFilter filters
?
UPDATE:
Problem is that filters = ViewBag.CurrentFilters
in my SearchResult view does not work with the type CarFilter
, because it keeps giving me NULL value when user clicked on the sort by Make.
Second UPDATE:
I tried changing filters = ViewBag.CurrentFilters
with CarFilter = ViewBag.CurrentFilters
. Now CarFilter filters
in my SearchResult(...)
method in my controller is not and null object, but ALL the values of the objects in the model class is null (which shouldn't be). I mean the filters object exists but it seems like the values of CarFilter class in my model haven't been passed by ViewBag.CurrentFilters
to the view.