Asp.net mvc 修改ASP.NET MVC的T4代码模板以摆脱完整的命名空间引用

Asp.net mvc 修改ASP.NET MVC的T4代码模板以摆脱完整的命名空间引用,asp.net-mvc,t4,code-templates,Asp.net Mvc,T4,Code Templates,在创建视图或控制器时,我们使用(需要告诉文件在哪里,谢谢)自定义T4代码模板。默认实现将这种类型放在第一行 <%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<ProjectNameHere.ViewModels.ViewModelClass>" %> 我们已经在Web.config中定义了ViewModel和MVC

在创建视图或控制器时,我们使用(需要告诉文件在哪里,谢谢)自定义T4代码模板。默认实现将这种类型放在第一行

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<ProjectNameHere.ViewModels.ViewModelClass>" %> 

我们已经在Web.config中定义了ViewModel和MVC命名空间,所以我希望代码模板能够生成它

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="ViewPage<ViewModelClass>" %>

有没有关于如何修改默认模板以获得这种结果的建议?哪些模板行实际生成这些

更多信息

我知道文件在哪里,并且已经做了修改。问题是,在模板中,他们使用的是

string mvcViewDataTypeGenericString = (!String.IsNullOrEmpty(mvcHost.ViewDataTypeName)) ? "<" + mvcHost.ViewDataTypeName + ">" : String.Empty;
string mvcViewDataTypeGenericString=(!string.IsNullOrEmpty(mvcHost.ViewDataTypeName))?“”:字符串。空;

ViewDataTypeName似乎包含完整的命名空间引用。我只想获得类的名称(在本例中为ViewModel类名)

您可以在此处找到模板:

*\Microsoft Visual Studio\Common7\IDE\ItemTemplates\CSharp\Web\MVC 2\CodeTemplates*

在那里,您可以编辑为每个模板生成的代码,每个模板的模板行各不相同,因此我无法告诉您,但您会立即发现它们

编辑

Web.Extensions的源代码不可用,但您可以使用relector并反思 \Microsoft Visual Studio\Common7\IDE\Microsoft.VisualStudio.Web.Extensions.dll程序集,以查看“mvcHost”提供的内容:)


然后,您会注意到一个ViewDataType属性,它是一个“类型”,然后您应该能够围绕它创建一些逻辑来获取类名。

谢谢您的回答。似乎没有比操纵名称空间字符串更干净的方法了。