結果ページ (フィルタリング ページとは別のビュー) を並べ替えようとしています。なぜ私に起こり続けるのか理解できないこの奇妙な問題に直面しました。
すべてのコードは非常に短い形式で提供されています。詳細については、コードの他の部分が必要かどうかお問い合わせください。
私のインデックスビュー(ユーザーが結果をフィルタリングする場所):
@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>
}
私の SearchResult ビュー:
@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 フォームのコントローラーに投稿することだけです (私のコードでは、フォームにたくさんのフィールドがあり、それらをすべて書き留めたくないため)、ユーザーがsort by SearchResult メソッドを GET にしてfilters = ViewBag.CurrentFilters
、最初からユーザーが入力した値を設定することになっています。
ここで面白いのは、 と をCarFilter filters
それぞれString carMake
別の場所に置き換えるときです。それは魅力のように機能します。
私の質問:
なんで?
どうすればこれを行うことができ
CarFilter filters
ますか?
アップデート:
問題は、ユーザーが Make による並べ替えをクリックしたときに NULL 値が返され続けるためfilters = ViewBag.CurrentFilters
、 SearchResult ビューで type が機能しないことです。CarFilter
2回目の更新:
で変えfilters = ViewBag.CurrentFilters
てみましたCarFilter = ViewBag.CurrentFilters
。現在CarFilter filters
、SearchResult(...)
コントローラーのメソッドはnullオブジェクトではありませんが、モデルクラスのオブジェクトのすべての値はnullです(これはすべきではありません)。つまり、filters オブジェクトは存在しますが、モデルの CarFilter クラスの値がViewBag.CurrentFilters
ビューに渡されていないようです。