通过 AJAX - ASP.NET MVC 发送空值

Send a null value through AJAX - ASP.NET MVC

我有一个方法需要 3 个参数,但出现了一个难题。其中一个参数必须位于第 3 个位置,但有时第 1 个和第 2 个参数可以取空值。因此,为了让第一个参数不接收第三个值,而是接收第三个参数,我必须发送 1 或 2 个 null 值。

为了更清楚,我有一个方法:

public ActionResult TurnoverPerItem(string startDate = null, string endDate = null, 
    int extra = 0) {
        //...
}

和一个发送请求的JS/JQuery函数:

$.get(url, function (data) {
    //....
}

但是,现在,变量 url 可以是以下之一(具有所有参数(startDateendDateextra)):

path/to/action/15-09-2015/23-09-2015/0

或只有 startDateextra

path/to/action/15-09-2015/0

甚至 extra

path/to/action/0

但在第二个示例中,参数 endDate 将采用值 od 0 而不是 extra,而 extra 将是 null,在第三个示例中,参数 startDate 将接受 extra 值,而其他参数将是 null.

我的问题是,是否可以向控制器发送空值? IE。类似(我尝试过的方法之一)

path/to/action/null/null/1

Web 应用程序非常健壮,因此参数 extra 必须排在第三位是有充分理由的,但我真的希望我不必详细介绍。

编辑:路由配置:

routes.MapRoute(
    name: "Default-Date",
    url: "{controller}/{action}/{startDate}/{endDate}/{extra}",
    defaults: new { controller = "reports", startDate = UrlParameter.Optional, endDate = UrlParameter.Optional, extra = UrlParameter.Optional }
);

对于你的问题,我有一个非常简单的答案。

Just try to create separate routing for each URL pattern.

只需尝试上述解决方案,此变通方法将真正解决您的问题。

我并不是说这是一个完美的解决方案,但它确实解决了我的问题。因此,根据我的研究,您无法通过 GET 请求传递 null 值。

不过,我能做的是发送字符串或数字。 startDate 和 endDate 都是字符串类型,通常格式如下:

12-09-1983 (dd-MM-yyyy) | or | 12-09-1983-13-45 (dd-MM-yyyy-hh-mm)

虽然创建单独的路由是个好主意(我感谢 Chetan Sharma 和 DPac 的回答),但由于某些后端原因我不会深入探讨,所以它不是一个选项。

我所做的只是填空。所以如果我只发送 extra,它看起来像:link/to/ajax/null/null/0

如果我只发送 startDate: link/to/ajax/12-12-2012/null/0

或者如果我要发送完整值,通常通过:link/to/ajax/12-12-2012/09-03/2015/0

所以 ajax 也可以发送 string = "null",唯一需要的步骤是测试字符串并将其视为正常的空值。

public ActionResult TurnoverPerItem(string startDate = null, string endDate = null, 
    int extra = 0) {
        startDate = (startDate != null && startDate.Equals("null")) ? null : startDate;
        endDate = (endDate != null && endDate.Equals("null")) ? null : endDate;
        //...
}

之后代码将继续 运行 正常。

更多信息:<Click here>