【问题标题】:Passing date parameters to @url.action via ajax通过 ajax 将日期参数传递给 @url.action
【发布时间】:2014-05-02 11:53:30
【问题描述】:

在我的 ASP.NET MVC 4 应用程序中,我使用从 StackOverflow post 获取的以下 JAX 代码将日期参数传递给控制器​​,但我收到以下 http 404 错误:“您正在寻找的资源已被删除、更改名称或暂时不可用。请求的 URL /myWebApp/myController/myAction/01/01/2014/12/31/2014"

这里的输入控件 txtFrom 和 txtTo 的值分别为 01/01/2014 和 12/31/2014。问题是 MVC 可能将每个日期解释为三个不同的参数。我们怎样才能解决它。我尝试用 $('#txtFrom').val().replace("///g", "_") 替换 $('#txtFrom').val() 但它不起作用。

window.location.href = '@Url.Action("myAction")/' + $('#txtFrom').val() + '/' + $('#txtTo').val();

动作方法

public ActionResult myAction(string startDate, string endDate)
{
 //simple code here to use the input parameters
}

【问题讨论】:

    标签: ajax asp.net-mvc asp.net-mvc-ajax url.action


    【解决方案1】:

    您可以使用 Razor 格式化日期字符串

    @HttpUtility.UrlEncode(date)
    

    使用 javascript

    encodeURIComponent(date)
    

    或将日期作为记号(自纪元以来的毫秒数)而不是人类可读的格式传递。

    编辑:

    在对此进行试验并进行一些研究之后,似乎斜线和%2f 编码会导致各种问题。坚持以毫秒表示日期,不用担心传递斜线。

    【讨论】:

    • 根据您的建议,我尝试了 @HttpUtility.UrlEncode(date) 并通过 Chrome 开发人员工具,我注意到 URL 格式正确显示为:“/myWebApp/myController/myAction/01%2F01%2F2014 /12%2F31%2F2014"。但我仍然收到同样的错误:找不到资源请求的 URL /myWebApp/myController/myAction/01/01/2014/12/31/2014"
    • 试试/myAction?startDate=x&endDate=x。如果这样可行,则可能是您的路由规则有问题。刻度可能是最安全的选择,因为它不包含任何特殊字符。
    • /myAction?startDate=x&endDate=x 工作。但是,导致/myAction/startDate/endDate 不起作用的路由规则可能是什么问题?
    • %2f 在执行路由之前被转换回斜线。人们有多种解决此问题的方法,例如将/ 替换为不同的字符。您可以在 IIS 设置中执行此操作,但是当您可以将刻度传递为 /myAction/xxx/xxx 时,这一切似乎比它值得做的更多。或者,您可以将日期格式设置为mmddyyyy,这比刻度更易读。另请注意,mm/dd/yyyy 很容易被误认为dd/mm/yyyy,毫秒表示可以避免这种情况。
    【解决方案2】:

    window.location.href 不是 ajax。它是您的浏览器向 url 发出 HTTP 获取请求。在您的情况下,它不是完整的网址,而是部分网址;因此错误。您可以尝试以下方法开始。用您的输入替换日期的硬编码值

    $.getJSON({‘@Url.Action("myAction")’ + '/', { startDate: ‘1/1/2001’, endData: ‘1/2/2002’ }});
    

    如果要处理任何返回值;请参阅 $.getJSON (http://api.jquery.com/jquery.getjson/) 上的 jquery 文档

    【讨论】:

      猜你喜欢
      • 2017-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-24
      • 1970-01-01
      相关资源
      最近更新 更多