2010-08-09 89 views
1
  • 我想在母版页
  • 用户控件是一个基本的菜单,列出物品种类
  • 我想动态拉类别列表中插入一个用户控件从SQL Server
  • 我可以使用代码背后的Web窗体来做到这一点,但你如何在MVC中做到这一点? 谢谢

Categories.ascx:C#ASP.NET MVC用户控件

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> 
<ul> 
<% foreach (string category in Model.Categories) { %> 
    <li> 
    <%= Html.Encode(category) %> 
    </li> 
<% } %> 
</ul> 
+2

这真的是一个Show-Me-Teh-Codez。 – 2010-08-09 22:25:16

+0

@ Maud'Dib,请用该代码更新该问题,而不是将其放入评论中,谢谢。 – DaveDev 2010-08-09 22:37:14

+0

@DaveDev对不起,这是我的第一篇文章。 – 2010-08-09 23:01:12

回答

0

我会为所有将使用您的MasterPage的控制器制作一个基础控制器。在那个基础控制器中,我会加载你的数据列表来创建菜单(从缓存,sql,不管),并将它存储在ViewData

如果你想要你也可以为你的所有模型制作一个基础模型,它将基于控制器加载你的视图,然后你可以直接将它加载到扩展这个基类的模型中。

假设您的路线更简单ViewData,在您的用户控件中,您可以访问ViewData并加载菜单,因为您可以假设所有的控制器都预先加载了这些数据。

+0

谢谢,我不知道为什么我从一开始就没有这样做。也许是因为我曾经在高中骑短途巴士。 – 2010-08-09 22:47:23

0

这是你的控制器:

ViewData["CategoryList"] = _categoryService.GetCategoryList(); 

这个存在于一个名为NameOfMyPartial.ascx文件:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> 

<% foreach (var category in (IList<Category>)ViewData["CategoryList"])) { %> 
    // do stuff with category 
<% } %> 

然后在你的主页面:

<% RenderPartial("NameOfMyPartial"); %> 
+0

这有效,但我不会建议使用ViewData集合。错误地输入这些魔术字符串非常容易,如果您错误地输入错误,将不会出现编译时错误。自定义Viewmodels通常是更好的选择(请参阅http://devermind.com/linq/aspnet-mvc-using-custom-viewmodels-with-post-action-methods/) – 2010-08-09 22:32:06

+0

@Adrian,我同意。我最近在办公室里做了一个关于使用ViewData的很大的臭味。一切都应该在视图模型中。但为了这个例子,我想尽可能保持简单。 – DaveDev 2010-08-09 22:35:04

+0

谢谢你们两位。 – 2010-08-09 22:45:54