red*_*bot 6 c# asp.net-mvc t4mvc asp.net-mvc-3
在我的控制器中,我想指定一个不同于默认值的视图.像这样 :
public ActionResult EditSurvey(Int32 id)
{
Survey survey = _entities.Surveys.Single(s => s.Id == id);
return View("Survey",survey);
}
Run Code Online (Sandbox Code Playgroud)
但是我没有将视图指定为字符串("Survey"),而是想直接引用它,所以如果我决定稍后更改我的视图名称,则不必手动更改此字符串.
所以我正在寻找这样的东西:
public ActionResult EditSurvey(Int32 id)
{
Survey survey = _entities.Surveys.Single(s => s.Id == id);
return View(Views.Admin.Survey,survey);
}
Run Code Online (Sandbox Code Playgroud)
好问题,没有内置支持,因为该View()方法需要一个字符串,但有一个名为T4MVC的Nifty工具由David Ebbo创建,就是这样.
有关codeplex的文档有一个手动安装过程,我建议直接从VS2010获取NuGet包管理器.
它很简单,整个过程就是你可以添加到项目中的文件.(T4MVC.tt和T4MVC.settings.t4),每次更改代码时,(1)右键单击T4MVC.tt和(2)单击"运行自定义工具".
它的作用是为所有控制器和视图生成一个带有子类,成员,属性的类.它甚至可以为您的所有内容创建强大的类型,例如图像,CSS,js等(我觉得这很棒)
示例:
这个
@Html.RenderPartial("DinnerForm");
Run Code Online (Sandbox Code Playgroud)
将会:
@Html.RenderPartial(MVC.Dinners.Views.DinnerForm);
Run Code Online (Sandbox Code Playgroud)
这个:
@Html.ActionLink("Delete Dinner", "Delete", "Dinners", new { id = Model.DinnerID }, null)
Run Code Online (Sandbox Code Playgroud)
会是这样的:
@Html.ActionLink("Delete Dinner", MVC.Dinners.Delete(Model.DinnerID))
Run Code Online (Sandbox Code Playgroud)
这个 :
<img src="/Content/nerd.jpg" />
Run Code Online (Sandbox Code Playgroud)
将是这样:
<img src="@Links.Content.nerd_jpg" />
Run Code Online (Sandbox Code Playgroud)
您必须tt在每次更改视图,控制器之前右键单击文件和"运行自定义工具",但是,如果要自动执行此操作,请查看Chirpy执行此操作以及更多操作.
(注意 T4MVC在文档上有aspx/mvc2示例,但在MVC3上运行正常,因为我在MVC3/Razor应用程序的生产中使用)
另请参阅SO上的T4MVC标签.