SVS 没有尽头

SVS is SQL & Visual Studio
随笔 - 9, 评论 - 8, 引用 - 0

导航

工具

关于

做技术的路没有尽头,你只能看到前方几公里,但是更远的地方总是看不太清,当远处的景色渐渐清晰,回首看,有我们深深的足迹。兄弟们,上路吧,前方还有更多的难关,也有更美的景色。

每月存档

广告



访客

View Code, ViewEngine Code

又快有1个月没写东西了,不是因为懒,而是忙于学习。ASP.NET MVC Preview 2已经发布一段时间了,在网上看到了一些相关的文章,但是由于是Preview的版本,没有SDK,学习很辛苦。很多文章都讲了Route的用法,Google一下太多了。但是我遇到了一些问题却始终没有找到答案,先在这里分享一下,看看大家有没有更好的方法。

我们在做一个web app的时候,通常会有很多的模块,例如MIS系统,里面会有CRM\HR等,这时再进行构架的时候,就会出现这样一个问题可能在不同的模块中都会有HomeController,当然我们可以在Project中添加文件夹,并使用不同的名称空间来解决,而且在URL上也可以自己添加Route来搞定。这些在Google都能找到解决方案,但是在View层的问题就麻烦了。类似于Controller,不同的模块都有Index视图,而默认情况下视图是依赖于文件系统的,而且还有。。。(下面说),view code 先,

 public class WebFormViewLocator : ViewLocator {
        public WebFormViewLocator() {
            ViewLocationFormats = new[] {
                "~/Views/{1}/{0}.aspx",
                "~/Views/{1}/{0}.ascx",
                "~/Views/Shared/{0}.aspx",
                "~/Views/Shared/{0}.ascx"
            };
            MasterLocationFormats = new[] {
                "~/Views/{1}/{0}.master",
                "~/Views/Shared/{0}.master"
            };
        }
    }

这个部分是MVC中WebFormViewLocator的构造函数,大家可以看出一个问题在,在Controller中调用RenderView的时候你只能指定View的Name,然后默认情况下WebFormViewEngine会调用IViewLocator的GetViewLocation方法,这个时候传入的参数就是viewContext和viewContex.ViewName,所以如果你的View没有按照这个格式保存在相应的目录中就会出现问题。

Code看过了,那问题就来了应用稍微复杂一些,我们的View就会有很多了中不能按照这种发式进行开发呀。

接下来又要仔细的看看Source Code了,ViewLocator在GetPaht函数中调用了一个IsSpecificPath的函数

        private static bool IsSpecificPath(string name) {
            return
                name.StartsWith("~", StringComparison.Ordinal) ||
                name.StartsWith("/", StringComparison.Ordinal);
        }

这回看明白了,只要在RenderView的时候按照这个规则写上路径就可以了,当然要添加.aspx后缀名。

没有SDK的日子。。。。。。

posted on 2008-04-09 13:56:31 by Sun.wei  评论(0) 阅读(3563)

Powered by: Joycode MVC Blogger System