2010-04-08 79 views
1

我试图创建一个包含网格和搜索的页面。问题是我想对网格有一个局部视图,而对于搜索有一个。使用局部视图

如果进行搜索,这应该使用新信息渲染网格局部视图。

目前我需要从网格(当前存储在viewdata中)等信息,例如我正在排序的列等,以便执行搜索,因为我想保留这些设置。该信息仅在部分网格中可用。

这样做的最好方法是让它在代码中整洁美观,但不是一团糟?

我在哪里可以存储我需要的信息在其他部分视图中?

部分视图1;

<table> 
     <%= Html.CreateGrid(Model, "Grid", "Grid", (int)ViewData["SortColumn"], (bool)ViewData["SortedASC"])%> 
</table> 

部分视图2;

<div class="searchControl"> 
    <input type="text" class="SearchBox" href="<%= Url.Action("Grid", "Grid", new {page = 1, columnToSortBy=/* would like to access viewdata from partial view 1 here. */, sortASC = /* would like to access viewdata from partial view 1 here. */ }) %>" /> 
    <input type="submit" value="Search" class="SearchButton" /> 
</div> 

我知道我可能会采取完全错误的做法,所以请随时指出我在正确的一个!

谢谢!

回答

1

ViewData是存储在Views和Partials中访问的数据的好地方。

如果您使用强类型视图,效果会更好。然后,您可以访问数据以通过键入的模型对筛选进行排序。 我会让模型类实现一个接口IGridFeatures,它具有SortedASC,SortColumn,Page的属性。

它通常是一个好主意,这些可选属性不在路由中,而是在查询字符串中。

+0

好的,所以如果我在视图中创建属性,然后在加载部分视图时我设置了值,那应该没关系? – MrW 2010-04-08 13:27:41

+0

您将模型传递给视图。该视图可以访问模型的属性。也许这个博客帮助http://stephenwalther.com/blog/archive/2009/04/13/asp.net-mvc-tip-50-ndash-create-view-models.aspx。 – 2010-04-08 21:18:57

0

我想你会更好地控制你的链接通过javascript,因为你真正想要的是控制用户界面。

+0

但是我无法做到这一点,因为它将请求发送到服务器,然后再从头开始渲染局部视图。而且我现在还没有发送请求的信息,因为这些信息位于部分视图1的视图数据中。 – MrW 2010-04-08 11:56:23