MVC POP Up и PostBack - PullRequest
       80

MVC POP Up и PostBack

0 голосов
/ 25 февраля 2020

У меня есть проект MVC c#, signalR, где Агент выполняет следующие шаги в Приложении

  • Вход в приложение. После успешного входа в систему приложение скрывает панель Div входа в систему и отображает список кнопок кампании и телефонии

enter image description here

  • Приложение отображает список кампаний. назначено на
  • Приложение отображает кнопку перед каждой кампанией, чтобы установить Готов / Не готов в кампании. В этом случае это RestAPI & Telemarketing
  • Если агенту нужно настроить себя не готовым к кампании, он открывает всплывающее окно со списком не готовых причин. Проблема:
  • Когда агент выбирает причину и отправляет ее, приложение отправляет сообщение обратно, оно теряет вид и сбрасывается в окно входа в систему.

Действие контроллера после отправки причины в окне PopUp:

 public ActionResult SetBreak(breakReasonModel form)
    {
        string tok=form.accessToken;
        string cmp = form.campaign;
        string selreason = "";
        for (int i=0;i < form.arrReasons.Length;i++)
        {
             selreason = form.arrReasons[i];
        }
        SetBreak obj = new SetBreak();
        System.Collections.Generic.List<ISCampaigns> IScampaignNames = new System.Collections.Generic.List<ISCampaigns>();
        IScampaignNames = obj.setNotReadyInCampaign(tok, cmp, selreason);

        return RedirectToAction("Index");
    }

Всплывающее окно всплывающего окна:

 @using Altitude.IntegrationServer.RestApiWebApp.Models
@model Altitude.IntegrationServer.RestApiWebApp.Models.breakReasonModel

<div id="divBreakReasons">
    @using (Html.BeginForm("SetBreak", "Home"))
    {

        @Html.ListBoxFor(m => m.arrReasons, Model.reasonsMultiSelectList, new { @class = "form-control" })

        @Html.TextBoxFor(model => model.accessToken, new { id = "txtaccessToken" })

        @Html.TextBoxFor(model => model.campaign, new { id = "txtcampaign" })
        <br />
        <button id="btn" type="submit" class="btn btn-block bg-primary" value="Submit" >Submit</button>
        <br />

    }
</div>

Индекс. chtml

<div class="row">
    <div class="col-md-4 table-responsive" id="telButtons">
        <table id="tblTelephony" class="table">
           --Telephony Buttons
            </tbody>
        </table>
    </div>
</div>
<div class="row">
    <div class="col-md-4 table-responsive">
        <p id="demo"></p>  // Campaign table with Ready/Not Ready buttons
    </div>
</div>
//ajax call to open popup
<div id="dialog" style="display: none"></div>
<script type="text/javascript">
    function getBreak(nrReason) {
        $("#dialog").dialog({
            autoOpen: false,
            modal: true,
        }); 
    $.ajax({
        type: "POST",
        url: "@Url.Action("popupBreak","Home")",
        data: '{breakReason : "' + dataToSend + '",accessToken : "' +acc+ '",campaign : "' + cmp + '"}',
        contentType: "application/json; charset=utf-8",
        dataType: "html",
        success: function (response) {
            $('#dialog').html(response);
            $('#dialog').dialog('open');
            console.log(response);
        },
        failure: function (response) {       
        },
        error: function (response) {       
        }
        });
    }
</script>

1 Ответ

0 голосов
/ 25 февраля 2020

Он делает именно то, что вы кодировали. Если вам нужно вернуть результат в текущее представление, вы должны использовать ajax вызов, который вернет результат действия.

пример

@using (Ajax.BeginForm("Action", "Controller", FormMethod.Post, new AjaxOptions() { HttpMethod = "POST", InsertionMode = InsertionMode.Replace, UpdateTargetId = "YourTargetForResult" }, new { @id = "ajaxForm" }))

Вы должны ссылаться на jquery .unobtrusive- ajax . js для получения обратной передачи в текущем представлении.

Пример на основе вашего комментария:

<input type="hidden" id="hdnResponseMessage" /> // add dom object where response hits

@using (Ajax.BeginForm("SetBreak", "YourControllerName", FormMethod.Post, new AjaxOptions() { HttpMethod = "POST", InsertionMode = InsertionMode.Replace, UpdateTargetId = "hdnResponseMessage" }, new { @id = "form" }))
    {
            @Html.ListBoxFor(m => m.arrReasons, Model.reasonsMultiSelectList, new { @class = "form-control" })

            @Html.TextBoxFor(model => model.accessToken, new { id = "txtaccessToken" })

            @Html.TextBoxFor(model => model.campaign, new { id = "txtcampaign" })
            <br />
            <button id="btn" type="submit" class="btn btn-block bg-primary" value="Submit" >Submit</button>
            <br />
    }

Контроллер:

[HttpPost]    
public JsonResult SetBreak(breakReasonModel form)
        {
        string tok=form.accessToken;
        string cmp = form.campaign;
        string selreason = "";
        for (int i=0;i < form.arrReasons.Length;i++)
        {
             selreason = form.arrReasons[i];
        }
        SetBreak obj = new SetBreak();
        System.Collections.Generic.List<ISCampaigns> IScampaignNames = new System.Collections.Generic.List<ISCampaigns>();
        IScampaignNames = obj.setNotReadyInCampaign(tok, cmp, selreason);

        return Json("SetBreak");
        }

jQuery установка прослушивателя в документе готов:

    // add dom object listener
    $('#hdnResponseMessage').bind('DOMNodeInserted', function () {
        var txt = $('#hdnResponseMessage').text();
        if (txt == 'SetBreak')
           {
              //do your stuff here;
           }

    });
...