Оператор Switch запускает все @ html.partials, а не выбранное значение - PullRequest
2 голосов
/ 09 июля 2019

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

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

Это сделано в umbraco, а части сделаны из backoffice, поэтому нет контроллера для рендеринга.и я попробовал операторы switch и if, но не могу заставить его работать так, как я хочу.

//My attempt at the function for the rendering of partials    
function SendMail(){
    var select = document.getElementById("foo");
    var selected = select.options[select.selectedIndex].value;

    if (selected == 1) {
        $.ajax({ url: @Html.Partial("Web/Partial1", @Model.boo) })
    }

    if(selected == 2){
        $.ajax({ url: @Html.Partial("Web/Partial2", @Model.boo)})
    }

    //switch (selected) {
    //    case '0':
    //        alert(selected);
    //        break;
    //    case '1':
    //        alert(selected);
            //   $.ajax({ url: Html.Partial("Web/Partial1", Model.boo)})
    //        break;
    //    case '2':
    //        alert(selected);
         //   $.ajax({ url: Html.Partial("Web/Partial2", Model.boo)})
    //            

// Это мой избранный html.

<select id="foo" onchange="SendMail()">
<option value="0" selected="selected">Vælg en type</option>
<option value="1">Ordrebekræftigelse</option>
<option value="2">Betalingsmail</option>
</select>

Ответы [ 2 ]

0 голосов
/ 09 июля 2019

Это синтаксическая ошибка на самом деле около HTML.Частично, он не принимает Html.Partial ("Web / Partial1", Model.boo) в качестве URL-адреса (удалите сами, и он не выдаст ошибку SendMail Не определено)

Поэтому я предлагаю создатьметод в контроллере

public ActionResult CallPartial(int selected){
  /// you can use switch case also 
   if(selected== 1)
     return PartialView("yourpartial1",YourModel);
    if(selected == 2)
     return PartialView("yourpartial2",YourModel);
 }

и в ответе ajax добавьте частичное представление к необходимому div

 function SendMail(){
 var select = document.getElementById("foo");
var selected = select.options[select.selectedIndex].value;

$.get( "YourControllerName/CallPartial",{selected : selected }, function( 
 data ) {
  $( ".result" ).html( data );
  });
}

 <div class='result'></div>
0 голосов
/ 09 июля 2019

Что вы можете сделать, это использовать Ajax.BeginForm.В форме установите Html.DropdownListFor() или DropDownList() с его параметрами и вызовите onchange($(this).closest('form').submit())

пример select.cshtml:

@using (Ajax.BeginForm(
        "_PartialMailChanger",
        "Manage",
        new AjaxOptions
        {
            // GET or POST (I assume GET in your case)
            HttpMethod = "GET",
            UpdateTargetId = "changeMailContainer",
            InsertionMode = InsertionMode.Replace
        },
        new { id = "formChangeMailPartial" }))
    {
        @Html.DropDownList("MailChangeDropdown", YOUR_LIST_OF_SELECTITEMS, new
        {
            onchange = @"$(this).closest('form').submit()"
        })
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...