【问题标题】:Best way to display a search form and its results in the same page?在同一页面中显示搜索表单及其结果的最佳方式?
【发布时间】:2011-05-04 17:59:36
【问题描述】:

假设我有一个带有文本框的简单搜索表单。在提交表单后,我将文本框的内容发送到一个存储过程,该过程将结果返回给我。我希望结果显示在与表单相同的页面上,除了它的下方。

现在我正在做以下事情,但它并没有完全按照我想要的方式工作:

我的 SearchController 的“索引”视图

@using (Html.BeginForm("SearchResults", "Search", FormMethod.Post, new { @class = "searchform" }))`{
<fieldset>
    <legend>Name</legend>
    <div class="editor-label">
        @Html.Label("Search")
    </div>
    <div class="editor-field">
        @Html.TextBox("Name")
    </div>
    <input type="submit" value="Search" class="formbutton" />
</fieldset>
@{ Html.RenderPartial("SearchResults", null);

这是我的“搜索结果”视图:

@model IEnumerable<MyProject.Models.spSearchName_Result>

<table>
@foreach (var item in Model)
{
<tr>        
    <td>
        @item.Name
    </td>
</tr>
}
</table>

这是我的控制器:

    // GET: /Search/SearchResult
    [HttpPost]
    public ActionResult SearchResult(FormCollection collection)
    {
        var result = myentity.spSearchName(collection["Name"]);            
        return PartialView("SearchResults", result);
    }

我似乎只能让结果显示在一个全新的页面上(不是作为部分视图嵌入),或者我在加载搜索页面时出现错误,因为没有结果(因为我没有尚未搜索)。

有没有更好的方法来实现我想要做的事情?我觉得我违背了 MVC 中的一些最佳实践。

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3


    【解决方案1】:

    您可以在 ViewData 对象中返回结果,然后仅在 not null 时显示在视图中。

    【讨论】:

      【解决方案2】:

      非常类似于这个问题MVC 3 form post and persisting model data

      对于这种情况,您似乎没有将结果传递给局部视图。试试这个?

      @{ Html.RenderPartial("SearchResults", Model.Results);
      

      【讨论】:

        【解决方案3】:

        由于您没有使用模型持久化搜索信息,因此在发布搜索表单时搜索信息将丢失。

        鉴于您的设计和既定目标,最好将 Index 视图中的表单转换为 Ajax 表单,然后您的控制器可以将您的部分视图发送回以填充 Ajax 表单下方的 div。

        辅导员

        【讨论】:

          猜你喜欢
          • 2010-10-24
          • 1970-01-01
          • 1970-01-01
          • 2016-06-25
          • 2013-03-12
          • 1970-01-01
          • 2013-03-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多