getJSON方法的构造URL出错

时间:2014-10-21 05:19:15

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

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

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

Chrome浏览器控制台中的错误是以下网址未返回找到的网页。

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

这是真的,因为在网址末尾添加了额外的令牌。
任何人都可以告诉我额外令牌的原因吗?
我在控制器中有一个合适的方法,但无法找到解决方案。
routeConfig.cs文件未更改,并且具有默认值。
如果您需要更多信息,请在评论中告诉我。我无法理解要提供哪些信息。

路线信息:

{
    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**);
        }

答案:
在**和代码工作的周围进行了上述更改。
感谢您的评论和回答 更新:
我提到了默认值以隐藏不需要的信息 localhost是正确的,其他页面正常工作只是与这个ajax调用相关的ui的一小部分不起作用。
没有控制器是别的名字。

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

2 个答案:

答案 0 :(得分:1)

改变你的号召(假设你的控制器真的名为ControllerController

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

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

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

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

答案 1 :(得分:0)

 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){
         }
    });