2009-05-21 4 views
4

У меня есть страница поиска, которая, если есть результаты в списке, передает этот список в представление. Однако, если результатов нет, я хочу отправить искомый текст в список, не содержащий результатов. Как я могу это сделать?Как передать строку в частичный вид в ASP.NET MVC?

ответ

6

Вам нужно будет найти искомый текст как часть модели, которая возвращается в представление. Затем у вас есть два варианта:

Использование RenderPartial передаст возвращенное представление частичному представлению, чтобы вы могли получить доступ к требуемому вами значению.

Html.RenderPartial("PartialView"); 

В качестве альтернативы, вы можете передать строку в качестве модели для частичного вида с использованием

Html.RenderPartial("PartialView", Model.SearchedText); 

Какой может иметь смысл, если вы хотите использовать частичный вид каких-либо результатов с различными моделями.

+0

Мне пришлось добавить его как часть модели. Теперь мне нужно реорганизовать мой код :) – ddd

3
<%Html.RenderPartial("SimpleTrustGridViewer", ViewData["departmentGrid"]); %> 

это передает объект ViewData [ «departmentGrid»] (это происходит от ViewData части, не частичный вид) на частичный вид SimpleTrustGridViewer.

упрощена:

<%Html.RenderPartial("myUserControl", myString); %> 

И ваш частичный вид наследует так:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<string>" %> 

Затем в вашем частичном представлении 'Модель' будет переданная строка.

0

Частичный вид, если вы не передадите ему что-то еще явно, имеет ту же модель, что и родительский вид.

1

ViewDataDictionary, переданный от контроллера к представлению, будет таким же, как и от представления к частичному представлению. Поэтому, если строка, которую вы хотите передать, находится в ViewDataDictionary, вам не нужно ее передавать.

<%=Html.RenderPartial("NorResultFound")) %> 

Но вы можете использовать ту же точку зрения, существуют ли результаты или нет:

<%if (Model.ResultCount!=0){ %> 
<%foreach(var result in Model){ %> 
<%= // display results %> 
<%}}%> 

<%else {%> 
<p>There is no results for <%=ViewData["keyword"]%> </p> 
<%} %> 
+0

Я согласен с вами, но я предпочитаю использовать сильно типизированную модель вместо mixin 'ViewData и model. Моя модель будет иметь 2 реквизита (реорганизованный код: D), класс SearchResult { Публичный IList Список {get; set;} public string Query {get; set;} } –

0

двумя способами (? Вы говорите о представлениях, а не частичный вид справа) 1) в контроллере только вызывать другое представление в случае отсутствия результатов, передающих строку как модель 2) создать модель, содержащую статус поиска (найдено x элементов, совпадение найдено и т. д.) и список результатов для одного и того же представления, что позволяет просмотр, чтобы сделать разные результаты с помощью оператора switch.

1

Я пробовал это и не мог заставить его работать. Скажем, у меня есть

<div id="SearchBar"> 


<% using (Html.BeginForm("IndexNoJavaScript", "Home")) 
{%> 
<%= Html.TextBox("SearchTextBox", ViewData["SearchText"]) %> 
    <input type="submit" value="Search" /> <% } %> 
    </div> 
<% Html.RenderPartial("SearchResults"); %> 

И когда я пытаюсь отобразить текст для поиска в этой точке зрения следующим образом:

<%= Html.TextBox("SearchedText", ViewData["SearchText"]) %> 

Мое текстовое поле пустое.

1

Вы можете использовать jquery и load() действие на теге div, insted of which partial; результат схож. load() Метод ajax вызывает контроллер с текстом, который вы хотите. like:

$('#divId').load('url/'+ serch content); 
Смежные вопросы