0

私はこの質問をしました、私は私の答えを得ませんでした。それで私はこれについてもっと多くの研究をしました、そしてそれでもこれに対する適切な良い答えを見つけることができませんでした。

私のコントローラー(短縮):

public ActionResult SearchResult(String sortOrder, String carMake, String carModel)
    {
        var cars = from d in db.Cars
                    select d;

        if (!String.IsNullOrEmpty(carMake))
        {
            if (!carMake.Equals("All Makes"))
            {
                cars = cars.Where(x => x.Make == carMake);
            }
        }

        if (!String.IsNullOrEmpty(carModel))
        {
            if (!carModel.Equals("All Models"))
            {
                cars = cars.Where(x => x.Model == carModel);
            }
        }
        switch (sortOrder)
        {
            case "Model":
                cars = cars.OrderBy(s => s.Model);
                break;
            default:
                cars = cars.OrderBy(s => s.Make);
                break;
        }

        return View(cars);
}

私のインデックスビュー(短縮-これは、ユーザーがさまざまな入力で車をフィルタリングする場所です):

@model IEnumerable<Cars.Models.Car>

@using (Html.BeginForm("SearchResult", "Home", FormMethod.Post))
{
<label>Make</label>
<select id="MakeID" name="carMake">
    <option>All Makes</option>
</select>

<label>Model</label>
<select id="ModelID" name="carModel">
    <option>All Models</option>
</select>

<button type="submit" name="submit" value="search" id="SubmitID">Search</button>
}

検索結果を表示するMySearchResultビュー(短縮):

@model IEnumerable<Cars.Models.Car>

<table>
@foreach (var item in Model)
{
    <tr>
        <td>
            <label>Make:</label>
            <p>@Html.DisplayFor(modelItem => item.Make)</p>
        </td>
        <td>
            <label>Model:</label>
            <p>@Html.DisplayFor(modelItem => item.Model)</p>
        </td>
    </tr>
}
</table>

<a href="@Url.Action("SearchResult", "Home", new { sortOrder= "Model"})">Model</a>
  • 私の目標:ユーザーが[モデルで並べ替え]をクリックすると、ページは結果をモデルで並べ替えます。

  • 問題:ソートバイがクリックSearchResultされると、検索値がSearchResultビューに存在しないため、アクションのすべてのパラメーターがnullになります。

  • 質問:これを修正するにはどうすればよいですか?

ありがとう、アミン

更新:どんな例でも深く感謝します。コントローラとビューの間でデータを送受信するプロセス全体をバックエンドで停止します。

4

3 に答える 3

0

以下のような1つのクラスを作成できます

    public CarFilter CarFilter;
    public byte PageSize;
    public short PageNumber;
    public int TotalRows;

CarFilter は、ユーザーが入力したフィルターを保存できる別のクラスです。このクラスをビューのモデルとして使用して、ビューのロード時にカー フィルター データをロードできるようにします。

于 2012-12-04T06:36:12.560 に答える
0

次のいずれかを実行して、検索フィルターを保持できます。

  1. セッションを使用して、検索結果ビューにフィルターを保存します。このように、Sort を使用して同じビューに投稿すると、検索フィルターが引き続き表示されます。

  2. (私はこれを好みます) 検索フィルターのプロパティを持つクラスにモデルをラップします。このようにして、引き続き検索フィルターを取得できます。ラッパー モデルをパラメーターとして受け入れる SearchResult の POST がある場合。

于 2012-12-04T06:38:02.403 に答える
0

次のようにクラスを作成します。

class ManageCarSearch
{
    public CarFilter CarFilter;
    public byte PageSize;
    public short PageNumber;
    public int TotalRows;
    public String sortOrder;

}

Class CarFilter 
{
    public String carMake, 
    public String carModel

}

searchResult ビューは次のようになります。

@model IEnumerable<car>

<table>
@foreach (var item in Model)
{
    <tr>
        <td>
            <label>Make:</label>
            <p>@Html.DisplayFor(modelItem => item.Make)</p>
        </td>
        <td>
            <label>Model:</label>
            <p>@Html.DisplayFor(modelItem => item.Model)</p>
        </td>
    </tr>
}
</table>

<a href="@Url.Action("SearchResult", "Home", new { sortOrder= "Model"})">Model</a>

以下のようにコントローラ:

public ActionResult SearchResult(String sortOrder, String carMake, String carModel)
    {

        var cars = from d in db.Cars
                    select d;
        ManageCarSearch objsearch = new ManageCarSearch();
       ////your Logic

        return View(objsearch);
}

ビューを検索すると、次のようになります。

@model IEnumerable<ManageCarSearch>

@using (Html.BeginForm("SearchResult", "Home", FormMethod.Post))
{
<label>Make</label>
<select id="MakeID" name="carMake">
    <option>All Makes</option>
</select>

<label>Model</label>
<select id="ModelID" name="carModel">
    <option>All Models</option>
</select>

<button type="submit" name="submit" value="search" id="SubmitID">Search</button>
}
于 2012-12-04T08:40:07.220 に答える