Asp.net mvc 在ASP.NET MVC4中创建用户控件
我在VS2012中使用ASP.NET MVC4开发了一个web应用程序,其中aAsp.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
HomeController
asViews/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);