如何将字符串传递给ASP.NET MVC中的部分视图?

时间:2009-05-21 09:42:18

标签: asp.net-mvc

我有一个搜索页面,如果列表中有结果,则会将此列表传递给视图。 但是,如果没有结果,我想将搜索到的文本发送到找不到结果的视图。 我该怎么做呢?

7 个答案:

答案 0 :(得分:6)

您需要将搜索到的文本作为返回到视图的模型的一部分。那你有两个选择 -

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

Html.RenderPartial("PartialView");

或者,您可以使用

将字符串作为部分视图的模型传递
Html.RenderPartial("PartialView", Model.SearchedText);

如果您想使用不同模型的无结果局部视图,这可能是有意义的。

答案 1 :(得分:3)

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

将对象ViewData [“departmentGrid”](来自非局部视图的viewdata)传递给局部视图SimpleTrustGridViewer。

简化为:

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

你的部分视图继承如下:

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

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

答案 2 :(得分:1)

从控制器传递到视图的ViewDataDictionary将从View传递到Partial View。因此,如果要传递的字符串位于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>
<%} %>

答案 3 :(得分:1)

您可以对div标签使用jquery和load()操作,而不是部分使用;结果是类似的。 load() ajax方法在控制器上调用您想要的文本。 喜欢:

$('#divId').load('url/'+ serch content );

答案 4 :(得分: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"] ) %>

我的文字框为空白。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

部分视图,除非您明确传递其他内容,与父视图具有相同的模型。