如何在MVC Razor中的同一页面内搜索

时间:2013-12-20 18:21:23

标签: asp.net-mvc razor

如何在MVC Razor的同一页面内搜索?例如;我的页面在打开时没有任何结果,如果我搜索return.i必须使用IEnumerable<model>来获取结果,但如果我使用IEnumerable<model>作为空白页面,我会收到错误。

搜索页面

@model IEnumerable<SearchResult>
<span>Search results:</span>
<p>
    @foreach(var item in Model)
    {
       @item.Title<br/>
    }
</p>

2 个答案:

答案 0 :(得分:1)

您需要为此类案例返回空模型。例如在控制器代码中:

public ActionResult Test()
{
    // some actions
    return View(new List<SearchResult>());
}

在这种情况下,它将发送空模型,并且不会失败。

答案 1 :(得分:0)

您可以创建包含搜索属性和结果列表的模型。

型号

Public class MySearchModel{
public string searchInput { get; set; }
public List<mySearchResultModel> resultList { get; set; }}

<强>控制器

  public ActionResult Index()
    {
        var model = new MySearchModel(); 
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(MySearchModel model)
    {

        model.searchInput //filter
            model.mySearchResultModel = //query where filter
        return View(model);
    }

查看

@model MySearchModel

<div>
 @Html.LabelFor(x => x.searchInput)
 @Html.TextBoxFor(x => x.searchInput)
</div>

<span>Search results:</span>
 @foreach (var item in Model.mySearchResultModel){
    @item.Title<br />
}

另一种实现相同目的的方法是添加搜索输入并将其映射到您使用输入名称发布的控制器操作:

<强>控制器

  public ActionResult Index()
    {


        var model = new mySearchResultModel();

        return View(model);
    }

    [HttpPost]
    public ActionResult Index(mySearchResultModel model, string searchInput)
    {


            model.mySearchResultModel = //query where filter (searchInput)
        return View(model);
    }

查看

@model IEnumerable<mySearchResultModel>
<input type="text" name="searchInput"/>

Search results:
@foreach(var item in Model) { @item.Title<br/> }