Опубликовать вызовы RedirectToAction, но представление, указанное в RedirectToAction, не отображается - PullRequest
2 голосов
/ 12 марта 2010

Вот некоторые из HTML

    <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");
    }

До этого момента в мире все было хорошо. Я нажимаю вышеописанный метод, и все значения заполняются.

Вот метод 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();
    }

Я тоже бьюсь об этом ... не вижу никаких значений в параметрах ... но это только потому, что я еще не передал их ... Я не думаю, что это удерживает страницу просмотра от отображения

Теперь ... можно было бы ожидать, что представление Viewer будет отображено ... верно? ... ну, все, что я вижу, это страница, с которой это было вызвано ... страница Viewer никогда не отображается ???! !?!?

Вот маршруты из 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, и страница отображается очень хорошо.

Любая помощь очень ценится!

EDIT

Получил работу ... положил кнопки в виде так что теперь форма выглядит так

     <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!

1 Ответ

1 голос
/ 15 марта 2010

получил на работу ... положил кнопки в виде так что теперь форма выглядит так

     <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!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...