首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >视图不渲染MVC 4

视图不渲染MVC 4
EN

Stack Overflow用户
提问于 2012-08-17 20:39:47
回答 2查看 4.4K关注 0票数 1

我有一个视图,当我单步执行代码时,它没有被调用,我看到它到达控制器中的操作并返回视图,但它没有加载视图,它只是停留在当前页面上。

当在特定页面上单击一个按钮时,会生成一个ajax post,调用下一个不会加载的页面。

我的contoller操作如下所示:

代码语言:javascript
复制
public ActionResult Comparison(int[] y)
        {
            CostModel.Getsuff(y);        

            return View(CostModel);
        }

我的路线图如下所示:

代码语言:javascript
复制
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

代码语言:javascript
复制
  $.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的新手。任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-17 20:41:02

正如我之前在跟踪它时提到的,它可以很好地执行ajax调用,并命中控制器上的操作,只是不启动视图。

这就是AJAX =>留在同一页面的全部意义所在。如果您想替换当前页面,请不要使用任何AJAX。使用普通的Html.ActionLink

如果您的控制器操作只返回一个PartialView,并且您只想刷新页面的一部分,则可以在success回调中执行此操作:

代码语言:javascript
复制
$.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

票数 4
EN

Stack Overflow用户

发布于 2012-08-17 20:43:05

从您的操作方法中,您将返回HTML (呈现的视图),而您的Ajax调用需要JSON作为响应格式。

我相信当响应到达时会抛出一个异常。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12006016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档