【发布时间】:2015-09-23 18:25:25
【问题描述】:
我有一个需要 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 }
);
【问题讨论】:
-
您考虑过更改路由吗?在我看来,您所拥有的路由非常模糊。
-
@DPac 正如我所说,遗憾的是,这不是一个选择。我并不是真正的代码创建者,而更像是一个修饰符。但是根据之前的程序员所做的,很多路线都依赖于 startDate 和 endDate 位于第一和第二位。
-
一个简单的解决方法是创建一个新方法作为您当前使用的方法的重载。
-
@DPac 嗯,我会尝试这样做。
-
我在找到更永久的解决方案之前采取的临时解决方案 - 可维护的解决方案是放入
if( startDate.Equals("null") ) startDate = null;
标签: c# asp.net ajax asp.net-mvc asp.net-mvc-routing