0

这可能是非常简单的事情,但是谷歌搜索并没有让我到任何地方。

在我们正在构建的 Web 应用程序中,我们有项目和模板。模板实际上只是项目,将 IsTemplate 标志设置为 true。所以很自然,我们有一个项目控制器来处理(或将处理)这两种情况。

我们有一个路由到New控制器上的操作方法:

Project/New

这只是{controller}/{action}/{id}处理该路线的标准路线。现在,Newaction 方法有一个IsTemplate参数。我想有一条路线,它被传入为假(上面的那个),第二条被传入为真:

Templates/New

用这样的不同 URL 屏蔽任意操作方法参数的正确方法是什么?我尝试了以下方法,但它只是混淆了路由(Html.ActionLink最终指向Templates/New):

routes.MapRoute(
    null,
    "Template/New",
    new { controller = "Project", action = "New", IsTemplate = true }
);

还是将其拆分为两个操作方法并让它们调用具有硬编码参数值的单个私有控制器方法对我来说会更简单吗?

4

2 回答 2

1

似乎这可能是最简单的选择。我将单个New操作方法拆分为两个操作方法,这两个操作方法都定义了不同的路由,第三个私有方法可以完成所有工作。如果有更漂亮的方法,我仍然愿意接受建议。

[HttpGet]
//Action method for a new template
public ActionResult NewTemplate() {
    return New(true, null);
}

[HttpGet]
//Action method for a new project
public ActionResult New(int? TemplateProjectID) {
    return New(false, TemplateProjectID);
}

private ActionResult New(bool IsTemplate, int? TemplateProjectID) {
    //Assorted code follows
于 2013-10-28T19:26:18.530 回答
0

也许RouteUrl可以帮助你?例如,如果您将路由命名TemplateNew为,您应该能够为此创建一个 url:

<a href="@Url.RouteUrl("TemplateNew")">New Template</a>
于 2013-10-28T18:37:49.377 回答