我在VS2012中使用ASP.NET MVC4开发了一个Web应用程序,其中HomeController
为Views/Home/Index.aspx
。
我在视图文件夹中创建了一个用户控件UC/UC_Menu.ascx
。
在Index.aspx页面中,我在下面编码并运行正常。
<% Html.RenderPartial("~/Views/UC/UC_Menu.ascx"); %>
现在,我想UC/UC_Menu.ascx
在数据库中加载数据。我该怎么办?
答案 0 :(得分:1)
在ASP.NET MVC中,视图和部分不应该检索任何数据。它们用于显示由视图模型形式的相应控制器检索的数据。
所以基本上你应该创建一个视图模型,它将是你数据的投影。例如:
public class MyViewModel
{
public string Foo { get; set; }
public string Bar { get; set; }
}
然后让控制器操作从数据库中获取数据并将其投影到视图模型:
public class HomeController: Controller
{
public ActionResult Index()
{
MyViewModel model = ... go fetch from db
return View(model);
}
}
现在您的Index.aspx
视图将强烈输入此视图模型,并将模型传递给您的部分视图:
<%@ Page Title="" Language="C#" Inherits="System.Web.Mvc.ViewPage<MyNs.MyViewModel>" %>
然后将模型传递给partial以显示:
<% Html.RenderPartial("~/Views/UC/UC_Menu.ascx", Model); %>
您的部分现在可以显示数据:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyNs.MyViewModel>" %>
<%= Html.DisplayFor(x => x.Foo) %>
<%= Html.DisplayFor(x => x.Bar) %>
答案 1 :(得分:0)
调用&#34;儿童行动&#34;为您提供类似于&#34; UserControls&#34;的封装。
注意:&#34; UserControls&#34;是ASP.NET Web窗体中使用的术语。在MVC中,您可以将其称为&#34; PartialView&#34;。
您可以在控制器上创建子操作,例如:
public class HomeController : Controller
{
[ChildActionOnly]
public ActionResult Menu()
{
var model = BuildModelFromDB();
return PartialView(model);
}
}
然后在视图中调用它,传入ActionName和ControllerName:
<%= Html.Action("Menu", "Home") %>