Asp net MVC控制器和小部件

时间:2010-04-06 09:56:00

标签: c# .net asp.net-mvc asp.net-mvc-2

据我所知,在ASP.NET MVC中,httprequest被映射到控制器/动作。

  • 当一个请求用于获取一个网页时,我们可以调用这些控制器“page controllers”吗?

我的另一个问题是关于小部件(用户控件)和RenderPartial方法:

  • 如果一个小部件代表一个经典的ASP.NET webcontrolusercontrol,并且我想在很多页面中呈现这个小部件,那么如果这个逻辑我怎么能避免重复小部件的逻辑是在“page controller”?

3 个答案:

答案 0 :(得分:1)

  

当一个请求用于获取一个网页时,我们可以调用这些控制器“页面控制器”吗?

你为什么这样?他们被命名为控制者。毕竟,控制器上的操作不一定会为“网页”提供服务,它可能会使用JSON数据,XML,RSS或仅仅是网页的一部分进行响应(如果需要,可以使用“控件”)。

  

如果一个小部件代表一个经典的asp.net webcontrol或usercontrol,并且我想在很多页面中呈现这个小部件,那么如果这个逻辑位于“页面控制器”中,如何避免重复小部件的逻辑? / p>

  1. 确保您的(业务)逻辑不在控制器中:它不属于那里。控制器的工作是映射输入/输出,而不是处理逻辑。
  2. 包含您的窗口小部件的视图应该包含ViewModel,其中包含窗口小部件中所需的ViewModel,例如
  3. -

    MainViewModel
    {
        UserWidgetViewModel UserViewModel;
        List<Foo> Bar;
        // ...
    }
    
    UserWidgetViewModel 
    {
        string UserName;
        int Reputation;
        //...
    }
    

    我首先觉得这个不优雅,但我现在已经使用了一段时间了,我相信它很好地封装了必要的数据。

    希望有所帮助

答案 1 :(得分:0)

HMM的 我想你需要修改你对控制器的理解。 控制器有几种方法。它不是映射到页面的控制器,而是ActionMethods。

当调用RenderPartial时,它正在输入相应的ActionMethod(并且该方法可以在任何控制器上),它返回在调用View(.aspx或其他.ascx)上调用它的地方呈现的PartialView(.ascx)如果您有多个级别的部分视图)。 没有逻辑重复...或者我可能不明白你的问题?

答案 2 :(得分:0)

您可以尝试widget controller。它利用.NET MVC 2中新的Html.RenderAction方法。是的,它在技术上破坏了纯mvc模式(做得好MS),但出于实际目的,你可能会发现它非常有用。