这可能是非常简单的事情,但谷歌搜索无力让我无处可去。
在我们正在构建的Web应用程序中,我们有了项目和模板。模板实际上只是Projects,IsTemplate标志设置为true。很自然地,我们有一个处理(或将处理)两种情况的Project控制器。
我们在控制器上有一条到New
操作方法的路径:
Project/New
这只是处理那个的标准{controller}/{action}/{id}
路线。现在,New
操作方法具有IsTemplate
参数。我希望有一条路由,它传入的是false(上面的那条),第二条传递的路径为true:
Templates/New
使用不同的URL屏蔽任意操作方法参数的正确方法是什么?我尝试了以下操作,但它只是混淆了路由(Html.ActionLink
最终指向Templates/New
):
routes.MapRoute(
null,
"Template/New",
new { controller = "Project", action = "New", IsTemplate = true }
);
或者我将它分成两个动作方法会更简单,并且让那些调用带有硬编码参数值的私有控制器方法?
答案 0 :(得分: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
答案 1 :(得分:0)
也许RouteUrl
可以帮到你?
例如,如果您将路线命名为TemplateNew
,则应该可以为此创建一个网址:
<a href="@Url.RouteUrl("TemplateNew")">New Template</a>