0

我有一个控制器类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

4 回答 4

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

如果您说明要允许哪些 URL 以及如何映射它们,那么毫无疑问有人会建议您如何设置路由。

于 2012-09-13T10:05:43.643 回答
0

如果您的 ID 为空,则不要传递任何查询字符串。像

    http://localhost:21068/Movies/ActionMethod
于 2012-09-13T09:54:02.113 回答
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

于 2012-09-13T10:14:21.173 回答
-2

我认为您可以传递可为空的参数,例如:

public string ActionMethod(string? id)

并且不要将任何查询字符串传递为:

http://localhost:21068/Movies/ActionMethod
于 2012-09-13T10:32:56.410 回答