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>
}

我的 SearchResult 视图显示搜索结果(缩短):

@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>
  • 我的目标:当用户点击按模型排序时,页面将按模型对结果进行排序。

  • 问题:当点击 sortby 时,SearchResult由于 SearchResult 视图中不存在搜索值,所以 action 的所有参数都将为空。

  • 问题:如何解决这个问题?

谢谢,阿明

更新:任何例子都将不胜感激。我被后端卡住了在控制器和视图之间发送和获取数据的整个过程。

4

3 回答 3

0

您可以像下面这样创建一个类

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

其中 CarFilter 是另一个类,您可以在其中存储用户输入的过滤器。并将此类用作您的视图的模型。因此,当您加载视图时,您可以加载汽车过滤器数据。

于 2012-12-04T06:36:12.560 回答
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 回答
0

您可以通过执行以下任一操作来保留您的搜索过滤器:

  1. 使用会话将过滤器存储在搜索结果视图中。这样,当您使用排序在同一视图上发布时,您仍然可以使用搜索过滤器。

  2. (我更喜欢这个)将您的模型包装在一个具有搜索过滤器属性的类中。这样,您仍然可以检索搜索过滤器。前提是您有一个接受 Wrapper Model 作为参数的 SearchResult 的 POST。

于 2012-12-04T06:38:02.403 回答