我使用Url.Action方法生成Url字符串。
结果如下:
"/Home/GetRejectTest/0?IsSelected=False"
控制器和操作名称正确但查询参数搞砸了。这是因为该操作没有RouteAttribute因此会生成查询参数吗?
我的行动:
public ActionResult GetRejectTest(Test test)
{
return new EmptyResult();
}
测试类有3个属性Id,Name,IsSelected。
我的路线定义:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
答案 0 :(得分:3)
您的生成(/Home/GetRejectTest/0?IsSelected=False
)的网址对于您的路线定义是正确的。您将Test
的新实例传递给Url.Action()
方法,
.ToString()
)模型中的每个属性 - 即
controller=Home, action=GetRejectTest, id=0, Name=null,
IsSelected=False
url: "{controller}/{action}/{id}"
)并更新占位符
(此时生成/Home/GetRejectTest/0
)但是你的
路由定义没有Name
和的{url}参数
IsSelected
所以这些被添加为查询字符串参数(因为
Name
为null
,未生成该属性的查询字符串)
所以结果现在是/Home/GetRejectTest/0?IsSelected=False
您尚未指出实际期望的结果,但创建特定路线定义将解决大多数情况。例如,如果你想要
/Home/GetRejectTest/0/false
或/Home/GetRejectTest/0/false/someName
如果Name
的值不是null
,则可以创建其他路由(必须在默认路由之前)
routes.MapRoute(
name: "Test",
url: "Home/GetRejectTest/{id}/{isselected}/{name}",
defaults: new { controller = "Home", action = "GetRejectTest", name = UrlParameter.Optional }
);
请注意,因为Name
的类型为string
,因此可能是null
,{name}
占位符需要是最后一个并标记为UrlParameter.Optional
(否则它将恢复使用查询字符串参数)