我在剃刀视图中有以下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中发送日期值的解决方案?
答案 0 :(得分:1)
改变你的号召(假设你的控制器真的名为ControllerController
$.getJSON('/Controller/ActionName/', { name: @ViewContext.RouteData.Values["Name"], startDate: $('#StartDate').val(), function (data) {..
这里有一些问题。您的默认路由接受名为ID的参数,但您的方法只有参数name
和startDate
。您没有传递任何带有这些名称的参数(您为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){
}
});