Лучший способ отобразить форму поиска и ее результаты на одной странице? - PullRequest
4 голосов
/ 04 мая 2011

Предположим, у меня есть простая форма поиска с текстовым полем. И после отправки формы я отправляю содержимое текстового поля в хранимую процедуру, которая возвращает мне результаты. Я хочу, чтобы результаты отображались на той же странице, где была форма, за исключением чуть ниже нее.

Сейчас я делаю следующее, но не получается так, как я хочу:

Вид "Index" моего 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);

Это мой "SearchResults" Вид:

@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.

Ответы [ 3 ]

3 голосов
/ 04 мая 2011

Очень похоже на этот вопрос MVC 3 форма сообщения и постоянные данные модели

В этом случае похоже, что вы не передаете результаты в частичное представление. Попробуйте это?

@{ Html.RenderPartial("SearchResults", Model.Results);
3 голосов
/ 04 мая 2011

Вы можете вернуть результаты в объекте ViewData, а затем показать его только при просмотре, если not null.

1 голос
/ 04 мая 2011

Поскольку вы не сохраняете свою поисковую информацию, используя модель, поисковая информация будет потеряна при публикации формы поиска.

Учитывая ваш дизайн и заявленную цель, было бы лучше преобразовать форму вваш индексный вид в форму Ajax, тогда ваш контроллер может отослать ваш частичный вид обратно, чтобы заполнить div ниже вашей формы Ajax.

counsellorben

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...