我定义了以下路线:
{theme}/{subtheme}/{contenttype}/{contentdetail}/Print
当我使用
时
Url.Action ("PrintLayout","Page",new {contentUrlTitle = Model.ContentUrlTitle}
我收到以下链接:
/theme1/subtheme1/contenttype1/myfirstcontenturltitle?action=PrintLayout
我希望它是一个RESTful URL。
/theme1/subtheme1/contenttype1/myfirstcontenturltitle/Print
你知道我在这里缺少什么吗?
答案 0 :(得分:3)
由于您尚未发布路线表(提示:发布您的路线表),我将不得不猜测路线是什么。如果您希望这样做,则路线必须是:
routes.MapRoute("contentDetail",
"{theme}/{subtheme}/{contenttype}/{contentdetail}/print"
new { controller = "Page", action = "PrintLayout", theme="", subtheme="", contenttype = ""
});
然后你的控制器:
public class PageController
{
public ActionResult PrintLayout(string theme, string subtheme, string contenttype, string contentdetail)
{
//do print stuff here
}
}
答案 1 :(得分:1)
Jose3d,
因此,以下声明:
Url.Action ("PrintLayout","Page",new {contentUrlTitle = Model.ContentUrlTitle}
将为路线匹配提供以下参数:
controller =“Page”,action =“PrintLayout”,contentUrlTitle =“{Model of Model.ContentUrlTitle}}”
正如您在此处所见,ASP.NET MVC隐式定义了'controller'和'action'参数。
多余的参数是未出现在网址中的参数。
对于您的情况,'action'参数不会出现在url中,因此它将被视为'多余参数',这就是它作为查询字符串显示的原因。
我的建议是:尝试重新格式化您的网址,以便{action}成为网址细分的一部分。
我不明白为什么'controller'参数也不会出现在查询字符串中?也许提供更多细节可能会更有帮助。
答案 2 :(得分:0)
我想你可以试试这个:
Url.Action("PrintLayout/Print", "Page");
问题在于,当您使用Dictionary来解析新参数时,默认行为就是那个。