5

結果ページ (フィルタリング ページとは別のビュー) を並べ替えようとしています。なぜ私に起こり続けるのか理解できないこの奇妙な問題に直面しました。

すべてのコードは非常に短い形式で提供されています。詳細については、コードの他の部分が必要かどうかお問い合わせください。

私のインデックスビュー(ユーザーが結果をフィルタリングする場所):

@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 filtersSearchResult(...)コントローラーのメソッドはnullオブジェクトではありませんが、モデルクラスのオブジェクトのすべての値はnullです(これはすべきではありません)。つまり、filters オブジェクトは存在しますが、モデルの CarFilter クラスの値がViewBag.CurrentFiltersビューに渡されていないようです。

4

1 に答える 1

0

フレームワークがプロパティ名を検出し、それをアクションパラメータ内にあるものにバインドすると、オブジェクトではうまく機能しないため、名前を変更すると機能しました。私のアドバイスは、単純なタイプに固執することです

同様のケース を次に示します。Html.RenderAction(MVC3)でモデルオブジェクトを送信する方法

ViewBagの問題ではなく、一般的にどのように機能するかを評価します。フラットモデルを使用する主な理由:/

于 2012-12-05T15:04:28.937 に答える