我有一个视图,当我单步执行代码时,它没有被调用,我看到它到达控制器中的操作并返回视图,但它没有加载视图,它只是停留在当前页面上。
当在特定页面上单击一个按钮时,会生成一个ajax post,调用下一个不会加载的页面。
我的contoller操作如下所示:
public ActionResult Comparison(int[] y)
{
CostModel.Getsuff(y);
return View(CostModel);
}我的路线图如下所示:
routes.MapRoute(
name: "Compare",
url: "Category/Comparison/{*xxxx}",
defaults: new { Controller = "Category", Action = "Comparison" }
).RouteHandler
= new CategoriesRouteHandler();
public class CategoriesRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
IRouteHandler handler = new MvcRouteHandler();
var vals = requestContext.RouteData.Values;
var list = vals["xxxx"].ToString().Split(',');
int[] y= new int[list.Length];
for (int i=0; i < list.Length; i++)
int.TryParse(list[i].ToString(),out y[i]);
vals.Add("y", y);
return handler.GetHttpHandler(requestContext);
}
} 我的ajax
$.ajax({
type: "POST",
url: '@Url.Action("Comparison", "Category", new { Categories = "PLACEHOLDER"})'.replace('PLACEHOLDER', arr),
dataType: "json",
traditional: true,
success: function(msg){alert(msg)}
} ); 正如我在前面跟踪它时所提到的,它可以很好地执行ajax调用,并命中控制器上的操作,只是没有启动视图。我想这可能与这个区域没有被定义的事实有关?所以也许这是在丢弃它,在MVC4中看不到任何地方来指定不同的区域,但我是MVC的新手。任何帮助都将不胜感激。
发布于 2012-08-17 20:41:02
正如我之前在跟踪它时提到的,它可以很好地执行ajax调用,并命中控制器上的操作,只是不启动视图。
这就是AJAX =>留在同一页面的全部意义所在。如果您想替换当前页面,请不要使用任何AJAX。使用普通的Html.ActionLink。
如果您的控制器操作只返回一个PartialView,并且您只想刷新页面的一部分,则可以在success回调中执行此操作:
$.ajax({
type: "POST",
url: '@Url.Action("Comparison", "Category", new { Categories = "PLACEHOLDER"})'.replace('PLACEHOLDER', arr),
traditional: true,
success: function(result) {
$('#someIdToRefresh').html(result);
}
}); 还要注意,我删除了dataType: 'json',因为您的控制器操作没有返回任何JSON。它正在返回text/html。
发布于 2012-08-17 20:43:05
从您的操作方法中,您将返回HTML (呈现的视图),而您的Ajax调用需要JSON作为响应格式。
我相信当响应到达时会抛出一个异常。
https://stackoverflow.com/questions/12006016
复制相似问题