Asp.net mvc 在ASP.NET MVC4中创建用户控件

Asp.net mvc 在ASP.NET MVC4中创建用户控件,asp.net-mvc,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 4,我在VS2012中使用ASP.NET MVC4开发了一个web应用程序,其中aHomeControllerasViews/Home/Index.aspx 我在视图文件夹中创建了一个用户控件作为UC/UC\u Menu.ascx 在Index.aspx页面中,我在下面编码并运行ok <% Html.RenderPartial("~/Views/UC/UC_Menu.ascx"); %> 现在,我想UC/UC\u Menu.ascx加载数据库中的数据。我该怎么做?在ASP.NET

我在VS2012中使用ASP.NET MVC4开发了一个web应用程序,其中a
HomeController
as
Views/Home/Index.aspx

我在视图文件夹中创建了一个用户控件作为
UC/UC\u Menu.ascx

在Index.aspx页面中,我在下面编码并运行ok

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


现在,我想
UC/UC\u Menu.ascx
加载数据库中的数据。我该怎么做?

在ASP.NET MVC中,视图和部分不应该检索任何数据。它们用于以视图模型的形式显示相应控制器检索到的数据

因此,基本上您应该创建一个视图模型,该模型将是数据的投影。例如:

public class MyViewModel
{
    public string Foo { get; set; }
    public string Bar { get; set; }
}
public class HomeController : Controller
{
    [ChildActionOnly]
    public ActionResult Menu()
    {
       var model = BuildModelFromDB();

       return PartialView(model);
    }
}
然后让控制器操作从数据库中获取数据并将其投影到视图模型:

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>" %>

然后将模型传递给部件以显示:

<% 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) %>

x、 Foo)%>
x、 条)%>
调用“子操作”可以提供类似于“用户控件”的封装

注意:“UserControls”是ASP.NET Web表单中使用的术语。在MVC中,您可以称之为“PartialView”

您可以在控制器上创建子操作,例如:

public class MyViewModel
{
    public string Foo { get; set; }
    public string Bar { get; set; }
}
public class HomeController : Controller
{
    [ChildActionOnly]
    public ActionResult Menu()
    {
       var model = BuildModelFromDB();

       return PartialView(model);
    }
}
然后在视图中调用它,传入ActionName和ControllerName:

<%= Html.Action("Menu", "Home") %>


您应该改用部分视图。他使用的是aspx Engine您可以创建一个操作方法来从数据库加载数据,作为该方法的回报,只需传递此
部分视图
@Ajay2707:编辑时,请注意内联代码跨度(
像这样
),仅用于句子中的代码。另外,请在编辑时尽量改进文章,以节省审阅者的时间。谢谢我的意思是:在用户控件中加载数据,而不是在视图中加载数据。你能帮我吗?我更新了我的示例,展示了如何将模型传递给强类型的分部代码。如果您还没有读到我的答案,我将再次重复:在ASP.NET中,MVC视图和部分不应该用于从任何地方加载数据。它们的唯一用途是显示以视图模型的形式传递给它们的数据。与传统的ASP.NET WebForms相比,它的设计模式有所不同,在传统的ASP.NET WebForms中,视图控件可能从数据库中获取数据。谢谢。!如果我想在母版页中使用它,我该怎么做?您应该能够传入ActionName和ControllerName,比如:
在controller中,我写(返回PartialView(model);)或(返回PartialView(“name_of_PartialView”,model);)将视图放在与控制器同名的视图文件夹中。将partialview重命名为操作的相同名称,然后返回partialview(model);