2011-08-18 69 views
0

我试图重构,其中包括2个MVC项目的解决方案:一个“用户体验”项目,并RouteValueDictionary在C#库项目中支持HTML扩展助手?

我已成立了一个独立的C#库对应的“内容管理系统项目” - “服务” - 项目在同一个解决方案空间中做许多事情。我想将这两个Web项目使用的Html扩展方法放在这个“中立”项目中,以便两个MVC项目之间不存在依赖关系。

我在使用这个类库中的RouteValueDictionary对象(to.MergeAttributes)时遇到了问题。我在Services项目中包含了对Sytem.Web.Routing的引用,但是当我尝试在助手类文件的顶部包含using语句时,VStudio拒绝识别该声明(“Can not resolve symbol'Routing' “)。

这很直观 - 只有一个可以参与URL路由的web项目需要一个RouteValueDictionary。

但现在看来,通常使用的HtmlHelper类里面的RouteValueDictionary对象,因为它可以采取由名称 - 值对的匿名对象并将其转换为一个字典在它的构造是这样的:

tag.MergeAttributes(new RouteValueDictionary(htmlAttributes)); 

.. 。因此通过提供在任何数量的标签属性名称 - 值对成标签和相对简单的语法调用视图助手的方法:

<%:Html.SomeTag(Model.Id, new {@class = "myClass", title = "myTitle"} %> 

所以,如果我不能在使用RouteValueDictionary我的帮手类,我是f orced与我的观点更繁琐的语法,就像这样:

<%:Html.SomeTag(Model.Id, new Dictionary<string, string>{ {"class", "myClass"}, {"title", "myTitle} }%> 

问:那么,有没有办法重新写助手类,以获得更简单的视图语法,而不使用RouteValueDictionary,或者是有办法允许在C#库项目中使用RouteValueDictionary?

回答

1

你给你班上什么项目目标?我能想到的唯一的事情就是你的项目目标设置为.NET 3.5 Client Profile,它不支持任何网络内容。

UPDATE:根据您的意见,最终的解决方案是为您的项目添加一个对System.Web.dll的引用。

在.NET 4.0中,System.Web.Routing.dll被类型转发到System.Web.dll。这是因为来自.NET 3.5的System.Web.Routing.dll中的功能已迁移到核心System.Web程序集。 System.Web.Routing.dll(v4.0)存在以满足类型转发(在迁移项目时保持向后兼容性)。

当您向.NET 4.0项目添加对System.Web.Routing.dll的引用时,还需要添加对System.Web.dll的引用。

+0

.NET Framework 4 – Faust

+0

...并且这个项目中使用的其他MVC类(如TagBuilder)没有问题。嗯... – Faust

+0

啊,自从你将它标记为asp.net-mvc-2,因为它是.NET 3.5上的MVC2,我想到了。 –