ASP> net MVC可重用部分

Mac*_*ros 7 asp.net-mvc-2

在winforms和ASP.net中使用.net几年后,我现在开始进入MVC(我知道的有点晚了).对我来说,一个主要的困惑是可重用"组件"的概念,类似于webforms中用户控件的概念.

例如,我想在我的网站的成员区域中有一些"小部件",其中一个是登录用户帐户管理器的详细信息.我可以将其创建为部分,但是当页面加载时,需要将数据作为ViewModel/View Data的一部分传入.我想在许多不同的部分中使用这个小部件,这意味着我需要将代码放入到许多不同的控制器中.这似乎违反了DRY原则,或者我在这里遗漏了什么?理想情况下,我希望将所有内容封装在1个部分中,然后可以在任何页面中使用.

jhe*_*exp 4

您可以采取三种方式:

1) 对于没有太多逻辑的简单控件,您可以为控件创建自定义视图模型的新实例: Html.RenderPartial("YourControl", new YourControlViewModel () { Param1="value1", Param2 = Model.AnotherValue });

2)如果您需要控件的一些后端逻辑,可以使用 Html.RenderAction("ActionName", "SomeControllerName", RouteValuesDictionary); 它将调用标准控制器操作,使用视图,并将结果输出插入回页面。您可以将 [ChildActionOnly] 属性添加到控制器方法,以确保该方法只能从 Html.RenderPartial 中使用。它稍微违反了 MVC 原则(视图不应调用控制器),但它对于小部件来说非常有用,并且在 Ruby on Rails 世界中使用它没有太多问题。你可以查看Haacked的精彩文章

3) 为自定义日期格式、计算等任务创建自定义 html 帮助器。

对于你的情况,我会选择第二个。