ASP.NET MVC3如何直接从控制器引用视图

时间:2011-02-24 13:04:50

标签: c# asp.net-mvc asp.net-mvc-3 t4mvc

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

public ActionResult EditSurvey(Int32 id)
    {

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

        return View("Survey",survey);
    }

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

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

public ActionResult EditSurvey(Int32 id)
    {

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

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

1 个答案:

答案 0 :(得分:9)

很好的问题,由于View()方法需要一个字符串,因此没有内置支持,但是T4MVC创建了一个名为David Ebbo的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文件和“运行自定义工具”,如果要自动执行此操作,Check out Chirpy这样做甚至更多。

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

另见SO上的T4MVC tag