动态查找,加载和添加部分视图

时间:2011-12-20 01:06:19

标签: asp.net-mvc-3 partial-views razor

我的任务是将现有的webforms应用程序转换为mvc 3 razor。

应用程序当前有一个aspx页面,它具有静态标题用户控件和动态创建的“n”个其他用户控件。在该文件的代码中,它在各个特定部分执行以下代码,以使用数据库提供的信息动态处理用户控件。

我知道如何静态创建部分视图,但对于MVC来说有点新,我将如何定义这个新的“aspx”页面以及动态查找,加载和添加部分视图(每个等同于下面的webforms代码)?

顺便说一句,代码也将在C#中。

Dim parent As Control = Page.FindControl(_moduleSettings.PaneName)

 Dim portalModule As PortalModuleControl = CType(Page.LoadControl(_moduleSettings.DesktopSrc), PortalModuleControl)

   parent.Controls.Add(portalModule)

我认为在页面渲染时我可以做这样的事情。我想让它变得尽可能简单。

“PaneName”将在父变量中设置,该变量确定页面中的显示位置(左,右或主)

“DeskTopSrc”是要显示的局部视图的名称。

因此,从代码中取出代码并将其放在主视图中。在视图中执行上面的处理逻辑(男孩,从后面的aspx代码切换到View会抛出一个循环。我必须习惯在View中进行处理。让我想起Classic ASP,但是Razor语法会有所帮助)。

通过@ Html.PartialView('部分视图名称')显示部分视图。此视图中可能包含与特定模型关联的网格。

以下是我不确定的部分。

我已经为与Controller关联的主视图完成了数据库处理,但没有对需要进行数据库处理的部分视图进行数据库处理。

在与主视图关联的Controller(包含此部分视图)中为此局部视图执行任何数据库处理逻辑(如果有)。

在循环覆盖这些“部分视图”的Action Index方法中,我可以获取数据并显示视图....

啊,我想我明白了......

在仔细思考之后,如果有人能帮我解决这里的最后陈述,我将不胜感激。

1.使用我在Views / Shared文件夹中需要的特定HTML标记静态创建部分视图。

2.在主视图中,我已经有了

@Html.Partial(ViewData["partial_view_left"]) 
@Html.Partial(ViewData["partial_view_right"])
@Html.Partial(ViewData ["partial_view_main"]) 

HTML中特定位置的语句,当我从数据库中检索其名称时,这些语句将呈现部分视图。

3.在Controller的Index方法中,我需要执行以下操作:

a)在新Controller的Index操作方法中循环转换逻辑(来自PageLoad事件中现有WebForms页面的CodeBehind),该方法将动态加载部分视图。

1) Find out where the partial view will be displayed (left, right, main) from the database via the "parent" variable.

2) Find out the name of the partial view that will be displayed from the database via the “DesktopSrc” variable.

例如:ViewData [“partial_view_left”] =“left_view”; OR

    ViewData["partial_view_right"] = "right_view"; OR

    ViewData["partial_view_main"] = "main_view";

3)这里是我不确定如何正确显示局部视图的地方。

我需要使用等效的webforms“Controls.Add”方法来渲染我从中检索的Controller的每个局部视图 步骤3.a.2中的数据库

   What statement can I use in this Index method of the Controller that will accomplish this?

换句话说,如果我动态地需要在父视图中显示多个局部视图,那么在MVC中如何实现?

我知道每个局部视图,我可以发送与之关联的模型,但我不知道如何在运行时从一个Action方法在主视图页面中放置几个​​局部视图。

1 个答案:

答案 0 :(得分:0)

如果你的部分视图需要进行一些处理,比如数据库检索,那么你应该使用

@{Html.RenderAction("ActionName");}

这将调用一个动作方法(不必在同一个控制器上),可以根据逻辑动态选择视图,并使用数据库中的数据填充ViewModel。

public ActionResult ActionName()
{
     var modelData = GetData();
     return View(settings.DesktopSrc, modelData);
}