通过 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
可以是以下之一(具有所有参数(startDate
、endDate
和 extra
)):
path/to/action/15-09-2015/23-09-2015/0
或只有 startDate
和 extra
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>
我有一个方法需要 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
可以是以下之一(具有所有参数(startDate
、endDate
和 extra
)):
path/to/action/15-09-2015/23-09-2015/0
或只有 startDate
和 extra
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>