2016-12-28 100 views
0

我有一个主要的脑冻结: 我有一个MVC 5项目,使用引导弹出窗体日期数据输入。在主着陆页上调用popovers并将数据字符串化JSON转发给Home控制器中的ActionResult函数,然后它访问SQL服务器数据库并返回一个JSON数据集,该数据集用于构建在cshtml视图中呈现的基于D3的可视化。 到目前为止,每件事情都有效,数据是有效的模型,并已经过单元测试。家庭控制器有两个控制器: 的酥料饼的js脚本(从http://jsfiddle.net/itsabhik/cxm4rt2u/2/那儿剽窃):ASP.Net MVC 5 ActionResult抛出404异常

 $('.main-attributes').on('shown.bs.popover', function() { 
     $('.submit').click(function() { 
      var fromval = $('.popover #fromvalue').val(); 
      var toval = $('.popover #tovalue').val(); 
        var option = { 
         url: '/Home/LoanCount', 
         data: JSON.stringify({ dStart: fromval, dEnd: toval }), 
         method: 'post', 
         dataType: 'json', 
         contentType: 'application/json;charset=utf-8' 
        }; 

      $.ajax(option).done(function (data) { 
         return (data); 
      }) 
      $('.main-attributes').popover('hide'); 
     }); 
     $('.cancel').click(function() { 
      $('.main-attributes').popover('hide'); 
     }); 
    }); 

而控制器代码:

 public ActionResult LoanCount(DateTime dStart, DateTime dEnd) 
    { 
     int iStart = (dStart.Year * 10000) + (dStart.Month * 100) + dStart.Day; 
     int iEnd = (dEnd.Year * 10000) + (dEnd.Month * 100) + dEnd.Day; 

     var json = Models.LoanCount.getCountStats (iStart, iEnd); 
     var data = JsonConvert.DeserializeObject<List<Models.LoanCount>> (json); 

     ViewBag.jData = json; 

     return Redirect ("/Views/Home/LoanCount.cshtml"); /* This is one of the 
            redirect variations            that have been tried */ 
    } 

,我遇到的问题是,所有的重定向变化是我用throw 404找不到异常。调用无参数的ActionResult的RedirectToAction(...)会引发403异常。 cshtml文件存在,路径已经过验证并且正确。

正在使用的浏览器是Chrome。缺少什么 - 有关这个问题的任何线索,建议?

+0

你为什么要重定向回来我不知道,但如果你只是从您的主页/ LoanCount返回视图 - 做路线的工作? –

+0

我想使用弹出式窗体从主页面传递SQL查询参数。这些参数产生一系列数据以评估企业中不同实体的流程绩效。 – Maris

+0

我想使用通过弹出窗体输入的数据从主应用程序页面传递SQL查询参数。这些参数产生一系列数据来评估过程绩效,并且通常生成企业中不同实体的BI仪表盘。 Home/LoanCount路线工作正常,并在第一次切割中实施,以测试基于D3的可视化页面。 SQL查询参数在模型类中被硬编码以简化调试过程。希望这是有道理的。 – Maris

回答

0

您可以使用代字号(〜)前缀返回视图。由于这个原因,URL不会被改变。

return View("~/Views/Home/LoanCount.cshtml"); 

如果你想改变,你必须使用RedirectToAction方法与控制器的名称和方法名的URL。

0

上一条评论:胖手指的Enter键。解决的办法是禁用ajax func,因为它发布了一个回调函数,用参数值重做URL并定义窗口位置,而不是发出ajax调用。它现在按预期工作。喔!

 $('.main-attributes').on('shown.bs.popover', function() { 
     $('.submit').click(function() { 
      var fromval = $('.popover #fromvalue').val(); 
      var toval = $('.popover #tovalue').val(); 
      var option = { 
       url: "/Home/LoanCount?dStart=" + fromval + "&" + "dEnd=" + toval, 
       data: JSON.stringify({ dStart: fromval, dEnd: toval }), 
       method: 'post', 
       dataType: 'json', 
       contentType: 'application/json;charset=utf-8' 
      }; 

      window.location.href = option.url; 

      $('.main-attributes').popover('hide'); 
     }); 

     $('.cancel').click(function() { 
      $('.main-attributes').popover('hide'); 
     }); 
    }); 

控制器:

 public ActionResult LoanCount(DateTime dStart, DateTime dEnd) 
    { 
     int iStart = (dStart.Year * 10000) + (dStart.Month * 100) + dStart.Day; 
     int iEnd = (dEnd.Year * 10000) + (dEnd.Month * 100) + dEnd.Day; 

     var json = Models.LoanCount.getCountStats (iStart, iEnd); 
     var data = JsonConvert.DeserializeObject<List<Models.LoanCount>> (json); 

     ViewBag.jData = json; 

     return View ("~/Views/Home/LoanCount.cshtml"); 
    }