当前位置:  开发笔记 > 后端 > 正文

ASP.NET MVC中的ModelFactory解决了'RenderPartial'问题

如何解决《ASP.NETMVC中的ModelFactory解决了'RenderPartial'问题》经验,为你挑选了1个好方法。

ASP.NET MVC中的'RenderPartial()'方法提供了非常低级别的功能.它没有提供,也没有尝试提供真正的"子控制器"模型*.

我通过'RenderPartial()'渲染了越来越多的控件.它们分为三大类:

1)控件是使用该页面模型的特定页面的直接后代

2)控件是特定页面的直接后代,该页面使用该页面的模型以及某种类型的 附加键.想想'DataRepeater'的实现.

3)代表它们出现的页面的不相关功能的控件.这可以是横幅旋转器,反馈表,商店定位器,邮件列表注册等任何内容.关键是它不关心它放在哪个页面上.

由于ViewData模型的工作方式,每个请求只存在一个模型对象 - 也就是说,子控件所需的任何内容都必须出现在页面模型中.

最终,MVC团队希望能够推出一个真正的"子控制器"模型,但在此之前,我只是在主控页面模型中添加任何内容,而这些模型也需要儿童控制.

在上面的(3)的情况下,这意味着我的'ProductModel'模型可能必须包含'MailingListSignup'模型的字段.显然这并不理想,但我已经接受了与当前框架的最佳妥协 - 并且最不可能"关闭未来的子控制器模型的任何门".

控制器应负责获取模型的数据,因为模型实际上应该是一个愚蠢的数据结构,不知道它从何处获取数据.但我不希望控制器必须在几个不同的地方创建模型.

我开始做的是创建一个工厂来创建模型.该工厂由控制器调用(模型不了解工厂).

public static class JoinMailingListModelFactory {

        public static JoinMailingListModel CreateJoinMailingListModel() {

            return new JoinMailingListModel()
            {
                MailingLists = MailingListCache.GetPartnerMailingLists();
            };
        }
    }   

所以我的实际问题是,同样问题的其他人如何实际创建模型.什么是未来与新MVC功能兼容的最佳方法?


注意:有些问题RenderAction()我不会进入这里 - 尤其是它只在MVCContrib中,而不是在ASP.NET-MVC的RTM版本中.其他问题引起了我选择不使用它的充分问题.所以我们假装现在只RenderPartial()存在 - 或者至少那就是我决定使用的东西.

JMS.. 5

而不是添加像MailingListSignup你的属性这样的东西,而是将它们ProductModel封装在类中的相同级别,ProductViewModel如下所示:

public class ProductViewModel() {
    public ProductModel productModel;
    public MailingListSignup signup;
}

然后让你的View强烈输入到ProductViewModel班级.您可以ProductModel通过调用访问Model.productModel,也可以使用注册类访问Model.signup.

这是对Fowler的"演示模型"(http://martinfowler.com/eaaDev/PresentationModel.html)的宽松解释,但我看到它被一些微软开发者使用,例如Rob Conery和Stephen Walther.



1> JMS..:

而不是添加像MailingListSignup你的属性这样的东西,而是将它们ProductModel封装在类中的相同级别,ProductViewModel如下所示:

public class ProductViewModel() {
    public ProductModel productModel;
    public MailingListSignup signup;
}

然后让你的View强烈输入到ProductViewModel班级.您可以ProductModel通过调用访问Model.productModel,也可以使用注册类访问Model.signup.

这是对Fowler的"演示模型"(http://martinfowler.com/eaaDev/PresentationModel.html)的宽松解释,但我看到它被一些微软开发者使用,例如Rob Conery和Stephen Walther.

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有