switch语句触发所有@ html.partials而不是所选值

时间:2019-07-09 08:23:01

标签: javascript umbraco partial-views

我正在设置一个功能,用于根据选择下拉菜单中的选择发送特定的电子邮件。根据选择,需要发送特定的邮件。邮件是从充当处理程序的局部视图发送的。

页面加载时,将渲染每个局部视图,并且所有邮件都将被发送,我不明白为什么这不起作用。

这是在umbraco中制作的,而局部文件是在后台制作的,因此没有要渲染的控制器。而且我已经尝试过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 :(得分:0)

您可以使用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()"
        })
    }

答案 1 :(得分:0)

实际上是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>