我有一个方法可以采用3个参数,但是一个dillema来了。其中一个参数必须位于第3位,但有时第1和第2参数可以取空值。因此,为了使第一个参数不接受第3个值,而是第3个参数,我必须发送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
将采用值0而不是extra
,而extra
将采用null
,而在第三个示例中,参数startDate
将包含extra
值,而其他参数将为null
。
我的问题是,是否可以向控制器发送空值?即。类似的东西(我试过的方法之一)
path/to/action/null/null/1
Web应用程序非常强大,因此参数extra
必须排在第3位才有正当理由,但我真的希望我不必详细了解这一点。< / p>
编辑:溃败配置:
routes.MapRoute(
name: "Default-Date",
url: "{controller}/{action}/{startDate}/{endDate}/{extra}",
defaults: new { controller = "reports", startDate = UrlParameter.Optional, endDate = UrlParameter.Optional, extra = UrlParameter.Optional }
);
答案 0 :(得分:0)
对于你的问题,我有一个非常简单的单行答案。
尝试为每种网址格式创建单独的路由。
试试上面的解决方案,这项工作将真正解决您的问题。
答案 1 :(得分:0)
我并不是说这是一个完美的解决方案,但它确实为我解决了这个问题。因此,根据我的研究结果,您无法通过null
请求传递GET
值。
但我能做的是发送一个字符串或数字。 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>