是否可以将空字符串传递给具有路由URL段而不是查询字符串的操作方法?

时间:2012-09-13 09:45:30

标签: c# asp.net asp.net-mvc

我有一个控制器类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=可以执行此操作,但它使用查询字符串。此外,不允许修改操作方法。 : - )

4 个答案:

答案 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