C# 操作生成错误的Url
我使用Url.Action方法生成Url字符串 结果是:C# 操作生成错误的Url,c#,asp.net-mvc,C#,Asp.net Mvc,我使用Url.Action方法生成Url字符串 结果是: "/Home/GetRejectTest/0?IsSelected=False" 控制器和操作名称正确,但查询参数错误。这是因为操作没有RouteAttribute,因此生成了查询参数吗 我的行动: public ActionResult GetRejectTest(Test test) { return new EmptyResult(); } 测试类具有这3个属性I
"/Home/GetRejectTest/0?IsSelected=False"
控制器和操作名称正确,但查询参数错误。这是因为操作没有RouteAttribute,因此生成了查询参数吗
我的行动:
public ActionResult GetRejectTest(Test test)
{
return new EmptyResult();
}
测试类具有这3个属性Id、名称和IsSelected
我的路线定义:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
生成的url(/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
,则可以创建其他路由(必须在默认路由之前)
请注意,由于Name
是string
的类型,因此可以是null
,因此{Name}
占位符需要是最后一个占位符,并标记为urlparmeter。可选的
(否则将恢复为使用查询字符串参数)生成的url(/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
,则可以创建其他路由(必须在默认路由之前)
请注意,由于
Name
是string
的类型,因此可以是null
,因此{Name}
占位符需要是最后一个占位符,并标记为UrlParameter。可选的
(否则将恢复使用查询字符串参数)什么是urlHelper
?显示操作方法签名和相关的注册路由ITS System.Web.Mvc.urlHelper什么是值?从屏幕截图上看,字典的名称和Id都有0和null值。因此,无论您得到什么,都是预期结果。不是吗?假设值是新的默认值Test
,(以及您使用默认路由{controller}/{action}/{id}
),那么url就正确了什么是urlHelper
?显示操作方法签名和相关的注册路由its System.Web.Mvc.urlHelper什么是值?。从屏幕截图上看,字典的名称和Id都有0和null值。因此无论您得到什么都是预期的结果。不是吗?假设值>是Test
的一个新的默认实例(并且您使用默认路由{controller}/{action}/{id}
),那么url是正确的。现在我明白了。我在自己身上使用id作为查询参数是愚蠢的;-)谢谢您的合理解释。现在我明白了。我在自己身上使用id作为查询参数是愚蠢的;-)谢谢你的合理解释。