在ASP.NET MVC4中创建UserControl

时间:2015-04-18 09:06:15

标签: asp.net-mvc asp.net-mvc-4

我在VS2012中使用ASP.NET MVC4开发了一个Web应用程序,其中HomeControllerViews/Home/Index.aspx

我在视图文件夹中创建了一个用户控件UC/UC_Menu.ascx

在Index.aspx页面中,我在下面编码并运行正常。

<% Html.RenderPartial("~/Views/UC/UC_Menu.ascx"); %>

现在,我想UC/UC_Menu.ascx在数据库中加载数据。我该怎么办?

2 个答案:

答案 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") %>
相关问题