【问题标题】:Error in constructed URL for getJSON methodgetJSON 方法的构造 URL 错误
【发布时间】:2014-10-21 05:19:15
【问题描述】:

我在剃刀视图中有以下 jQuery 调用。

$.getJSON('/Controller/ActionName/'+ @ViewContext.RouteData.Values["Name"] + '?Date=' + ('#StartDate').val(), function (data) {
    alert(data);
    });

chrome 浏览器控制台的错误是以下 URL 已返回未找到页面。

http://localhost:{portNumber}/Controller/ActionName/John?Date=9/21/2014&_=1413867422739

这是真的,因为在 url 的末尾添加了额外的标记。
谁能告诉我额外令牌的原因?
我在控制器中有适当的方法,但无法找到解决方案。
routeConfig.cs 文件没有更改,它具有默认值。
如果您需要更多信息,请在 cmets 中告诉我。我无法理解要提供哪些信息。

路线信息:

{
    routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", name = UrlParameter.Optional }
        );
}

控制器中的动作签名

public JsonResult ActionName(string**?** name, DateTime startDate)
        {
            var model = new ViewModel();
            model.loadItems(name**.value**, startDate);
            return Json(model.Data,  **JsonRequestBehavior.AllowGet**);
        }

答案:
在 ** 包围中进行了上述更改,并且代码有效。
感谢您的 cmets 和答案。
更新:
我提到了默认值是为了隐藏不需要的信息。
localhost 是正确的,其他页面工作正常只是与此 ajax 调用相关的一小部分 ui 不起作用。
没有控制器是其他名称。

您能否提供在 URLS 中发送日期值的解决方案?

【问题讨论】:

  • 你调用的方法的签名是什么?
  • 额外的token是为了防止ajax调用被缓存,它是一个随机数,会附加到每个请求中。它不应该影响任何东西,但从控制器获取 Action 签名会有所帮助。
  • loclhst000000 是什么?
  • 你的问题是日期格式。 "9/21/2014" 获取变量中不能有"/"
  • 你的控制器真的叫ControllerController吗?

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


【解决方案1】:

您调用的更改(假设您的控制器确实名为 ControllerController

$.getJSON('/Controller/ActionName/', { name: @ViewContext.RouteData.Values["Name"], startDate: $('#StartDate').val(), function (data) {..

这里有一些问题。您的默认路由接受一个名为 ID 的参数,但您的方法只有参数 namestartDate。您没有传递任何具有这些名称的参数(您正在为 date 传递一个参数,但与方法签名参数不匹配)

请注意,您不应以这种方式对控制器和操作名称进行硬编码。推荐的方式是

var url = '@Url.Action("ActionName", "Controller")';

【讨论】:

  • 是的,我忘记在问题中更新此处的路线信息。会尝试你的建议。感谢您的投入。
  • 或将您的方法更改为 public JsonResult ActionName(string ? Id, DateTime startDate)。
【解决方案2】:
 var StartDate= ('#StartDate').val();    
 var url="/Controller/ActionName/'+ @ViewContext.RouteData.Values["Name"] + '/";

     $.ajax({
     url: url,
     data: { Date: StartDate},
     cache: false,
     type: "POST",
    success: function (data){
         },
    error: function (data){
         }
    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 2017-02-23
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    相关资源
    最近更新 更多