我有一个控制器类Movie
。其动作方法之一如下:
public string ActionMethod(string id)
{
if (id == null)
{
return "null";
}
if (id == string.Empty)
{
return "empty";
}
return "neither null nor empaty";
}
是否可以将空字符串传递给具有路由URL段而非查询字符串的操作方法?
请注意,http://localhost:21068/Movies/ActionMethod?id=
可以执行此操作,但它使用查询字符串。此外,不允许修改操作方法。 : - )
答案 0 :(得分:1)
我不清楚你想要实现的目标,但你可以通过在Global.asax.cs中正确指定路由来实现。作为一个人为的例子,如下:
routes.MapRoute(
"",
"{controller}/{action}/id/{id}",
new { controller = "Home", action = "Index", id = "" }
);
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
允许您使用:
http://localhost:21068/Movies/ActionMethod - id is null
http://localhost:21068/Movies/ActionMethod/id/ - id is an empty string
http://localhost:21068/Movies/ActionMethod/id/123 - id is a nonempty string
如果您说明要允许的网址以及如何映射这些网址,则有人会建议您如何设置路线。
答案 1 :(得分:0)
如果您的ID为空,请不要传递任何查询字符串。喜欢
http://localhost:21068/Movies/ActionMethod
答案 2 :(得分:0)
如果您不能使用查询字符串,您是否考虑过使用表单?我没有测试过这个,但是试一试:
@using (Html.BeginForm("ActionMethod", "YourControllerName", "GET")) {
<input type="text" name="id">
<input type="submit" name="submitForm" value="submitForm" />
}
参考:http://msdn.microsoft.com/en-us/library/dd460344(v=vs.108).aspx
答案 3 :(得分:-2)
我认为你可以传递可以为null的参数:
public string ActionMethod(string? id)
并且不会将任何查询字符串传递为:
http://localhost:21068/Movies/ActionMethod