在MVC中执行搜索之前不要显示结果

时间:2014-05-22 03:14:37

标签: asp.net-mvc database search-engine

我试图只显示搜索结果,而不是整个数据库。

这是我的控制器:

public async Task<ActionResult> Index(string searchString)
    {
        var asset = from s in db.AssetInventoryTables
                    select s;
        if (!String.IsNullOrEmpty(searchString))
        {
            asset = asset.Where(s => s.AssetTag.Contains(searchString) ||
                    s.ECCNNum.Contains(searchString) ||
                    s.GTag.Contains(searchString) ||
                    s.ItarNum.Contains(searchString) ||
                    s.ViperTag.Contains(searchString) ||
                    s.PartNum.Contains(searchString) ||
                    s.SerialNum.Contains(searchString) ||
                    s.SerialNum2.Contains(searchString) ||
                    s.SerialNum3.Contains(searchString) ||
                    s.SerialNum4.Contains(searchString) ||
                    s.SerialNum5.Contains(searchString) ||
                    s.SchedBCode.Contains(searchString) ||
                    s.Notes.Contains(searchString) ||
                    s.Name.Contains(searchString) ||
                    s.LocationTable.LocNAME.Contains(searchString) ||
                    s.ITARTable.ItarTYPE.Contains(searchString) ||
                    s.ProgramTable.ProgNAME.Contains(searchString) ||
                    s.StatusTable.StatTYPE.Contains(searchString) ||
                    s.SystemTable.SysNAME.Contains(searchString)
                    );
        }
        var assetinventorytables = db.AssetInventoryTables.Include(a => a.ITARTable).Include(a => a.LocationTable).Include(a => a.LocationTable1).Include(a => a.MoveTable).Include(a => a.ProgramTable).Include(a => a.RMATable).Include(a => a.ShipProviderTable).Include(a => a.ShipStatusTable).Include(a => a.SiteLocationTable).Include(a => a.StatusTable).Include(a => a.SystemTable).Include(a => a.TransferTable);
        //return View(await assetinventorytables.ToListAsync());
        return View(asset);
    }

我正在尝试搜索多个字段。 这是我的index.cshtml

<h2>Index</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
@using (Html.BeginForm("Index", "Movement2", FormMethod.Get))
{
<p>
        Search: @Html.TextBox("searchString")
        <input type="submit" value="Search" />
    </p>

if ("searchString" != null)
{
<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Name)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.ViperTag)
        </th>
        <th>
        @Html.DisplayNameFor(model => model.PartNum)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.SerialNum)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.Notes)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.LocationTable.LocNAME)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.ProgramTable.ProgNAME)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.StatusTable.StatTYPE)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.SystemTable.SysNAME)
    </th>

    <th></th>
</tr>

@foreach (var item in Model)
{
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Name)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ViperTag)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.PartNum)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.SerialNum)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Notes)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.LocationTable.LocNAME)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ProgramTable.ProgNAME)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.StatusTable.StatTYPE)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.SystemTable.SysNAME)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id = item.AssetID }) |
            @Html.ActionLink("Details", "Details", new { id = item.AssetID }) |
            @Html.ActionLink("Delete", "Delete", new { id = item.AssetID })
        </td>
    </tr>
}

</table>
}
}

这里是我试图阻止页面加载时显示所有记录的地方。所有我想看到的是搜索框,一旦搜索框有一个值并提交,它将只显示搜索结果。这就是为什么我使用IF语句,但它仍然显示页面加载的所有记录。我很难过。

1 个答案:

答案 0 :(得分:0)

你需要有两种行动方法

  1. 使用操作过滤器HTTPGET
  2. 现有的装饰为HTTPPOST
  3. 搜索按钮 POST 数据 FormMethod.Get

    当ModelCount为0

    时隐藏表格
相关问题