2010-03-12 75 views
2

下面是一些HTML的POST调用RedirectToAction但视图中RedirectToAction规定不会被渲染

<form id="frmSubmit" action="/Viewer" style="display:none;">    
     <div id="renderSubmit" class="renderReport">     
      <input type="hidden" name="reportYear" id="reportYear" value="" /> 
      <input type="hidden" name="reportMonth" id="reportMonth" value="" /> 
      <input type="hidden" name="propIds" id="propIds" value="" />     
      <input type="hidden" name="reportName" id="reportName" value="" />             
      <input type="hidden" name="reportYearFrom" id="reportYearFrom" value="" /> 
      <input type="hidden" name="reportMonthFrom" id="reportMonthFrom" value="" />     
      <input type="hidden" name="reportYearTo" id="reportYearTo" value="" /> 
      <input type="hidden" name="reportMonthTo" id="reportMonthTo" value="" />     
     </div>  
    </form> 

一点点进一步下跌的页面

<div id="reportList" class="renderReport">  
     <fieldset style="width:105%;"> 
     <legend class="reportStepLegend">Step 3. <br /> Click a report name below to view a report</legend>     
      <br />     
      <% foreach (ReportMetaData item in (ReportMetaDataContainer)ViewData.Model) { %>      
       <div>       
        <input id=<%=item.SSRSName%> type="button" class="reportLink" value="<%=item.DisplayName%>" /> 
       </div>      
      <%}%> 
     </fieldset> 
    </div> 

这里的按钮被点击时调用的JavaScript

$('.reportLink').click(function() { 
    if (CheckDateAndProps() === true) { 
     $('#reportName').val(this.id); 
     var formData = $("#frmSubmit").serializeArray(); 
     $.post('Home/PostViewer/', formData); 
    } 
}); 

注意......我确实有.post的$像这样前面...但它没有看到米到任何区别

 $.post('Home/PostViewer/', 
         formData, 
         function(data) { 
          alert(data.Result); 
         }, "json"); 

这里的控制器代码

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult PostViewer(string reportYear, 
           string reportMonth, 
           string propIds, 
           string reportName, 
           string reportYearFrom, 
           string reportMonthFrom, 
           string reportYearTo, 
           string reportMonthTo) 
    { 
     return RedirectToAction("Viewer"); 
    } 

所有这些都是好的世界到这point..I'm打上面的方法,并填充所有的值。

这里的GET方法的ActionResult

[AcceptVerbs(HttpVerbs.Get)] 
    public ActionResult Viewer(string reportYear, 
           string reportMonth, 
           string propIds, 
           string reportName, 
           string reportYearFrom, 
           string reportMonthFrom, 
           string reportYearTo, 
           string reportMonthTo) 
    { 
     return View(); 
    } 

我打这个太...在参数没有看到任何价值......但是这只是因为我还没有与他们擦肩而过尚未...我不认为这是保持查看器页面显示的内容?

现在......人们会期望查看器视图被渲染......对吧?......我所看到的就是这个被调用的页面......浏览器页面从不被渲染? !!?!?

下面是Global.asax的

 routes.MapRoute(
      "Viewer",          // Route name 
      "Home/Viewer",         // URL with parameters 
      new { controller = "Home", action = "Viewer" } // Parameter defaults         
     ); 

     routes.MapRoute(
      "Default",            // Route name 
      "{controller}/{action}/{id}",       // URL with parameters 
      new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
     ); 

路由我可以直接浏览页面 http://localhost:50083/Home/Viewer ,当我这样做,我打的ActionResult方法和页面呈现就好了。

任何帮助,非常感谢!

编辑

得到它的工作...有把按钮形式 所以现在的形式看起来像这样

 <form id="frmSubmit" name="frmSubmit" action="/Home/Viewer" method="post" target="_blank"> 
     <div id="renderSubmit" class="renderReport">     
      <input type="hidden" name="reportYear" id="reportYear" value="" /> 
      <input type="hidden" name="reportMonth" id="reportMonth" value="" /> 
      <input type="hidden" name="propIds" id="propIds" value="" />     
      <input type="hidden" name="reportName" id="reportName" value="" />             
      <input type="hidden" name="reportYearFrom" id="reportYearFrom" value="" /> 
      <input type="hidden" name="reportMonthFrom" id="reportMonthFrom" value="" />     
      <input type="hidden" name="reportYearTo" id="reportYearTo" value="" /> 
      <input type="hidden" name="reportMonthTo" id="reportMonthTo" value="" />     
     </div> 
     <div id="reportList" class="renderReport">  
      <fieldset style="width:105%;"> 
      <legend class="reportStepLegend">Step 3. <br /> Click a report name below to view a report</legend>     
       <br />     
       <% foreach (ReportMetaData item in (ReportMetaDataContainer)ViewData.Model) { %>      
        <div>       
         <input id=<%=item.SSRSName%> type="button" class="reportLink" value="<%=item.DisplayName%>" /> 
        </div>      
       <%}%> 
      </fieldset> 
     </div> 
    </form> 

和JavaScript看起来像这样

$('.reportLink').click(function() { 
    if (CheckPropIds() === true) { 
     $('#reportName').val(this.id); 
     $("#frmSubmit").submit(); 
    } 
}); 

它点击这里的控制器代码

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Viewer(string reportYear, 
           string reportMonth, 
           string propIds, 
           string reportName, 
           string reportYearFrom, 
           string reportMonthFrom, 
           string reportYearTo, 
           string reportMonthTo) 
    { 
     if (reportName == "foobar") 
     {     
      return RedirectToAction("FoobarView"); 
     } 
     else 
     { 
      return View("Viewer"); 
     } 
    } 

and voila!...我看到视图!...如果reportName是foobar ...我看到FoobarView!

+0

如果您找到解决方案,请将其作为答案并将答案标记为已接受。这个问题仍然没有解决。 – LukLed 2010-03-14 04:17:12

+0

是的,先生!马上就是mon capitan! – w4ik 2010-03-15 14:04:56

回答

1

明白了......有把按钮形式 所以现在的形式看起来像这样

 <form id="frmSubmit" name="frmSubmit" action="/Home/Viewer" method="post" target="_blank"> 
     <div id="renderSubmit" class="renderReport">     
      <input type="hidden" name="reportYear" id="reportYear" value="" /> 
      <input type="hidden" name="reportMonth" id="reportMonth" value="" /> 
      <input type="hidden" name="propIds" id="propIds" value="" />     
      <input type="hidden" name="reportName" id="reportName" value="" />             
      <input type="hidden" name="reportYearFrom" id="reportYearFrom" value="" /> 
      <input type="hidden" name="reportMonthFrom" id="reportMonthFrom" value="" />     
      <input type="hidden" name="reportYearTo" id="reportYearTo" value="" /> 
      <input type="hidden" name="reportMonthTo" id="reportMonthTo" value="" />     
     </div> 
     <div id="reportList" class="renderReport">  
      <fieldset style="width:105%;"> 
      <legend class="reportStepLegend">Step 3. <br /> Click a report name below to view a report</legend>     
       <br />     
       <% foreach (ReportMetaData item in (ReportMetaDataContainer)ViewData.Model) { %>      
        <div>       
         <input id=<%=item.SSRSName%> type="button" class="reportLink" value="<%=item.DisplayName%>" /> 
        </div>      
       <%}%> 
      </fieldset> 
     </div> 
    </form> 

和JavaScript看起来像这样

$('.reportLink').click(function() { 
    if (CheckPropIds() === true) { 
     $('#reportName').val(this.id); 
     $("#frmSubmit").submit(); 
    } 
}); 

它击中这里的控制器代码

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Viewer(string reportYear, 
           string reportMonth, 
           string propIds, 
           string reportName, 
           string reportYearFrom, 
           string reportMonthFrom, 
           string reportYearTo, 
           string reportMonthTo) 
    { 
     if (reportName == "foobar") 
     {     
      return RedirectToAction("FoobarView"); 
     } 
     else 
     { 
      return View("Viewer"); 
     } 
    } 

和瞧!!我看到视图!...如果reportName是foobar ...我看到FoobarView!