如何在ASP.NET MVC中向局部视图传递字符串?

4

我有一个搜索页面,如果列表中有结果,它会将这个列表传递给一个视图。 但是,如果没有结果,我想将搜索的文本发送到一个“未找到结果”的视图。 我该如何处理呢?

7个回答

6

您需要将搜索文本作为返回给视图的模型的一部分进行传递。然后,您有两个选择 -

使用RenderPartial将返回的视图传递给局部视图,以便您可以从那里访问所需的值。

Html.RenderPartial("PartialView");

另外,您可以将字符串作为部分视图的模型传递。

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

如果你想使用无结果的局部视图来处理不同的模型,这样做可能是有意义的。


我不得不将它作为模型的一部分添加。现在,我需要重构我的代码 :) - ddd

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

这个操作将一个名为ViewData["departmentGrid"]的对象(来自非部分视图的ViewData)传递给了部分视图SimpleTrustGridViewer。
<%Html.RenderPartial("myUserControl", myString); %>

你的局部视图继承如下:

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

然后,在您的部分视图中,“Model”将是传递的字符串。

1
你可以使用jQuery和load()动作在div标签上,而不是使用partial;结果是相似的。 load() ajax方法调用控制器并传递所需的文本。 例如:
$('#divId').load('url/'+ serch content );

1
从控制器传递到视图的ViewDataDictionary将与从视图传递到部分视图的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>
<%} %>

我同意你的观点,但我更喜欢使用强类型模型而不是混合ViewData和模型。我的模型将有两个属性(易于重构的代码:D)。class SearchResult { public IList List {get; set;} public string Query {get; set;} } - Andrea Balducci

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"] ) %>

我的文本框是空白的。


0

除非你显式地传递其他内容,否则部分视图将具有与父视图相同的模型。


0

两种方法(你是在谈论视图而不是部分视图,对吗?) 1)在控制器中,如果没有结果,只需调用不同的视图并传递一个字符串作为模型。 2)创建一个包含搜索状态(找到x个项目,未找到匹配项等)和结果列表的模型,将其传递给相同的视图,允许视图使用switch语句呈现不同的结果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接