Перезагрузка основного вида после нажатия кнопки в PartialView

У меня есть частичное представление, что пользователь может предварительно выполнить поиск, и результаты поиска отображаются в поле выбора. На моем главном экране есть раздел, который должен показывать результаты поиска после нажатия кнопки выбора. Прямо сейчас, когда я нажимаю кнопку выбора, загружается правильная информация в правильную модель для моего основного вида, но основной вид не изменяется. Когда я нажимаю обновить, страница обновляется правильно. Как сделать так, чтобы страница обновлялась автоматически при нажатии кнопки в представлении плагина?

Мой раздел в основном виде (Index.vbhtml) в моем основном приложении:

@Section CUInfo

 Credit Union Name: @Model.CUInfo.CUName

 end section

Вот мой метод контроллера в моем плагине:

Function ChangeCUInfo(strCUName As String) As ActionResult
        m_hostApp.CUInfo.CUName = strCUName
        m_hostApp.blnPluginRefreshButtonPressed = True
        Return View("Index", m_hostApp)
    End Function

Я попытался установить логическое значение в объекте hostApp, а затем в моем главном представлении бритвы вызвать эту функцию, если это правда:

@code
     If Model.blnPluginRefreshButtonPressed = True Then


         @<script type="text/javascript">
              $(function () {
                  window.location.reload();
              });
         </script>


      End If

      Model.blnPluginRefreshButtonPressed = False
End Code

РЕДАКТИРОВАТЬ:

Функция JS вызывается при нажатии кнопки выбора:

function loadCU(CUInfo) {
           strCU = CUInfo.split('|');
           strCUName = strCU[0];         
           $.ajax({
           type: "POST",
           url: "/CUContractNumberPlugin/ChangeCUInfo",
           data: { "strCUName": strCUName }
       });
       }

Форма, которая используется в представлении плагина:

@Using (Html.BeginForm("ChangeCUInfo", "CUContractNumberPlugin"))
                 @<div id="LogoSigSearch" style="height:300px;width:500px;position:relative;">



    <span style="display:inline-block;height:20px;width:166px;position:absolute;top:35px;left:5px;">Credit Union Name</span>


    <br />
     @Html.TextBox("strCUName")
    <input type="submit" name="LogoSigSearch$ctl02" value="Search" id="LogoSigSearch_ctl02" tabindex="3" style="width:60px;position:absolute;top:5px;left:352px;" />






    <input name="LogoSigSearch$ctl05" type="button" onclick="javascript:clearSearch()" value="Clear" style="position:absolute;top:35px;left:352px;width:60px;" />

    <select size="4" name="LogoSigSearch$ctl06" id="LogoSigSearch_ctl06" tabindex="5" style="height:230px;width:342px;position:absolute;top:65px;left:5px;"></select>

    <input type="button" name="SelectCU" value="Select" onclick="javascript:loadCU(LogoSigSearch_ctl06.options[LogoSigSearch_ctl06.selectedIndex].value)"  tabindex="4" style="width:60px;position:absolute;top:65px;left:352px;" />
        </div>
    End Using

1 ответ

Являются ли обе кнопки частью формы? Кнопка не вызовет действие, если вы не присоедините его к сценарию или не сделаете его частью формы со связанным действием.

Используйте частичное представление для отображения результатов запроса даже при загрузке главной страницы. Это упрощает ваше развитие.

Добавьте обработчик события jQuery ( jQuery.on ()), чтобы отслеживать нажатие кнопки на главной странице или, если кнопка возвращается в частичном представлении, просто используйте обработчик "Готово" в своей части и присоедините button.click(), снова используя jQuery.

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

Ваш клиентский код будет выглядеть примерно так:

 $("#your-button").click(function () {
    var fetchUrl = '@Url.Action("ActionName", "Controller")';

    $.post(fetchUrl, { searchParams: $("#your-search-box").val() })
        .success(function (data) {
          // replace the contents of the DIV with the results. 'data' 
          // here has whatever you sent back from your partial view
        })
        .error(function (data) { 
          // handle the error, use a DIV with some kind of alert message etc
        });

});

Надеюсь, это поможет некоторым.

Другие вопросы по тегам