6

在我的控制器中,我想指定与默认值不同的视图。像这样 :

public ActionResult EditSurvey(Int32 id)
    {

        Survey survey = _entities.Surveys.Single(s => s.Id == id);

        return View("Survey",survey);
    }

但是,我不想将视图指定为字符串(“Survey”),而是直接引用它,因此如果我决定稍后更改视图的名称,我不必手动更改此字符串。

所以我正在寻找这样的东西:

public ActionResult EditSurvey(Int32 id)
    {

        Survey survey = _entities.Surveys.Single(s => s.Id == id);

        return View(Views.Admin.Survey,survey);
    }
4

1 回答 1

9

好问题,没有内置支持,因为该View()方法需要一个字符串,但是有一个由David Ebbo创建的称为T4MVC的 Nifty 工具可以做到这一点。

codeplex 上的文档有一个手动安装过程,我建议直接从 VS2010 使用 NuGet 包管理器获取它。

它非常简单,整个事情就是您可以添加到项目中的文件。(T4MVC.ttT4MVC.settings.t4),每次更改代码时,(1)右键单击 T4MVC.tt 和(2)单击“运行自定义工具”

它的作用是为所有控制器和视图生成一个包含子类、成员、属性的类。它甚至可以为您的所有内容创建强大的类型,例如图像、css、js 等。(我认为这很棒)

例子:
这个

@Html.RenderPartial("DinnerForm");

将会:

@Html.RenderPartial(MVC.Dinners.Views.DinnerForm);

这个:

@Html.ActionLink("Delete Dinner", "Delete", "Dinners", new { id = Model.DinnerID }, null)

改为:

@Html.ActionLink("Delete Dinner", MVC.Dinners.Delete(Model.DinnerID))

这个 :

<img src="/Content/nerd.jpg" />

会是这样的:

<img src="@Links.Content.nerd_jpg" />

tt每次更改视图、控制器时,您都必须右键单击文件和“运行自定义工具”,但是,如果您想自动执行此操作,请查看执行此操作的 Chirpy等等。

注意T4MVC 在文档中有 aspx/mvc2 示例,但在 MVC3 上工作正常,因为我在生产中使用 MVC3/Razor 应用程序)

另请参阅SO 上的T4MVC 标签

于 2011-02-24T13:08:48.390 回答