又快有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的日子。。。。。。
Other Posts:
>>Framework Design Studio发布了
>>Subtext从睡眠中醒来
>>MFC Feature Pack发布
>>IE 8 Beta 1简体中文版正式发布
>>给 VSTO 插件、文档传送参数
>>SharePoint News
>>Unity DI 容器 1.0 发布了
>>技巧/诀窍: 创建和使用Silverlight和WPF 用户控件
>>Silverlight技巧,诀窍,教程和链接
>>[Best Practice]给你的SharePoint Web Application设置单独的应用程序池
>>在Silverlight中做单元测试
>>VSTO 也有官方中文书啦!!!
Month Archives:
Top Tags:
Company & Product Profiles Google Internet Technology Search feature Business and Technology Web2.0 column analysis 服务介绍 application letter comment 业界信息 news Startups deal Search Headlines China2.0 產業策進 Social Network 未來趨勢 widget 創投 news_in 业界动态 SEW Experts 創業案例 Web 2.0 News & Ideas
@2007 All rights Reserved |