当我单步执行代码时,我有一个未被调用的视图我看到它到达控制器中的操作并返回视图但它不会加载它只保留在当前页面上的视图。
当在特定页面上单击按钮时,会调用ajax帖子调用下一页,但不会加载。
我的控制器操作如下所示:
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调用并且在控制器上执行操作它只是不启动视图。我认为这可能与该地区未在任何地方定义的事实有关?所以也许它把它抛出,在MVC 4中无法看到指定不同区域的任何地方,但我是MVC的新手。任何帮助将不胜感激。
答案 0 :(得分:4)
正如我之前提到的,当我追踪它时,它会执行ajax调用 很好,并击中控制器上的动作,它只是没有启动 图。
这就是AJAX =&gt;的重点。留在同一页面上。如果要替换当前页面,请不要使用任何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
。
答案 1 :(得分:1)
从您的操作方法,您返回HTML(呈现的视图),而您的Ajax调用期望JSON作为响应的格式。
我相信当响应到来时会抛出异常。