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

时间:2015-09-23 18:25:26

标签: c# asp.net ajax asp.net-mvc asp.net-mvc-routing

我有一个方法可以采用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可以是以下之一(包含所有参数(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将采用值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 }
);

2 个答案:

答案 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

如果我只发送startDatelink/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>