【问题标题】:Send a null value through AJAX - ASP.NET MVC通过 AJAX 发送空值 - ASP.NET MVC
【发布时间】: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 可以是以下之一(带有所有参数(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 }
);

【问题讨论】:

  • 您考虑过更改路由吗?在我看来,您所拥有的路由非常模糊。
  • @DPac 正如我所说,遗憾的是,这不是一个选择。我并不是真正的代码创建者,而更像是一个修饰符。但是根据之前的程序员所做的,很多路线都依赖于 startDate 和 endDate 位于第一和第二位。
  • 一个简单的解决方法是创建一个新方法作为您当前使用的方法的重载。
  • @DPac 嗯,我会尝试这样做。
  • 我在找到更永久的解决方案之前采取的临时解决方案 - 可维护的解决方案是放入 if( startDate.Equals("null") ) startDate = null;

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


【解决方案1】:

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

尝试为每个 URL 模式创建单独的路由。

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

【讨论】:

  • 不行,因为其他方法使用类似的路由。其他一些方法路线可以只采用 startDate (任何地方都没有额外的)。我确实想到了 - 它只是不能作为解决方案运行。
【解决方案2】:

我并不是说这是一个完美的解决方案,但它确实为我解决了问题。因此,根据我的研究,您无法通过 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

如果我只发送startDatelink/to/ajax/12-12-2012/null/0

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

所以 ajax 也可以发送 string = "null",唯一需要的步骤是测试字符串并将其视为正常的 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    • 2013-09-19
    • 2013-01-12
    • 1970-01-01
    • 2015-08-04
    • 1970-01-01
    相关资源
    最近更新 更多