2016-09-28 75 views
0

我把一个自举开关拨到我的应用程序 现在我想是在开启和关闭值发送到我的操作方法在asp.net MVC从JavaScript将数据传递到操作方法

贝娄是我的剃刀语法

@using (Html.BeginForm()) 
{ 
@Html.AntiForgeryToken() 
@Html.ValidationSummary(true) 

<fieldset style="height:60px"> 
    <legend style="text-align:center; font-size:large; font-family:'Times New Roman'; background-color:#C8E6C9; color:red">Remote On/Off</legend> 
    <input id="test_id" name="cmdName" type="checkbox" checked data-toggle="toggle"> 

</fieldset>} 

对于来自JS将数据传递到控制器我已经搜查了许多文章,发现AJAX是做

方式娄里面JS

我的AJAX脚本
<script> 
var cmdName = '@Session["cmdName"]'; 


    $("#test_id").on("change", function (event) { 
     if ($(this).is(":checked")) { 
      $.ajax({ 
       url: '@Url.Action("MultiGraph")', 
       type: 'Post', 
       data: 'On', 
       success: function() { 
        alert(data) 
       } 
      }); 
     } else { 
      $.ajax({ 
       url: '@Url.Action("MultiGraph")', 
       type: 'Post', 
       data: 'Off', 
       success: function() { 
        alert(data) 
       } 
      }); 
     } 
    }); </script> 

我也用会话变量,但得到空值在它

贝娄是我的控制器代码

public ActionResult MultiGraph(string search, string start_date, string End_date, string cmdName, int? page) 
{ 
//search contain serial number(s) 
//cmdName is for input checkbox 
} 

贝娄是我的开关按钮图像

enter image description here

当我切换到关闭那么这关字符串应该被发送到我的操作方法,并反之亦然

更新的代码

阅读评论我也做了以下更改我的代码

我已经添加了一个新的操作方法后,键入Post

[HttpPost] 
    public ActionResult ToggleSwitch (string search, string cmdName) 
    { 
     List<SelectListItem> items = new List<SelectListItem>(); 

     var dtt = db.ADS_Device_Data.Select(a => a.Device_Serial_Number).Distinct().ToList(); 

     foreach (var item in dtt) 
     { 
      if (!string.IsNullOrEmpty(item)) 
      { 
       items.Add(new SelectListItem { Text = item, Value = item }); 
      } 
     } 

     ViewBag.search = items; 

     return View(); 
    } 

贝娄是我的剃须刀变化

$("#test_id").on("change", function (event) { 
     if ($(this).is(":checked")) { 
      $.ajax({ 
       url: '@Url.Action("ToggleSwitch")', 
       type: 'Post', 
       data: '{"cmdName": "On"}', 
       success: function() { 
        alert(data) 
       } 
      }); 
     } else { 
      $.ajax({ 
       url: '@Url.Action("ToggleSwitch")', 
       type: 'Post', 
       data: '{"cmdName": "Off"}', 
       success: function() { 
        alert(data) 
       } 
      }); 
     } 
    }); 

但我仍然没有得到警告信息,当我检查元素,我发现这个错误

enter image description here

我坚持这个问题几乎2天

任何帮助,将不胜感激

+2

您的操作需要4个(或可选的5个)参数,但您只传递一个字符串; “开”或“关”。即使你没有提供参数名称 –

+0

实际上我只是想通过命令名称打开或关闭我的行动方法 – faisal1208

+1

除了Rory的评论,你还没有指定你张贴到服务器通过装饰你的动作方法正确的属性'[HTTPPOST]'我认为默认情况下它的设置为'[HTTPGET]' –

回答

0

您需要使用$字符invoque jQuery功能和页面之间传递数据与您在使用操作方法定义的同名控制器符号:

 '{"cmdName": "On"}', 

     $.ajax({ 
      url: '@Url.Action("ToggleSwitch")', 
      type: 'Post', 
      data: '{"cmdName": "On"}', 
      success: function() { 
       alert(data) 
      } 

此外,您可能需要来装饰你的蒙山属性[HttpPost] MVC行动。

+0

我没有看到他的示例代码中的差异和你的解决方案。 – Iztoksson

+0

@ Uporabnik003查看数据属性。 – anmarti

+0

@anmarti请参阅我的更新代码 – faisal1208

相关问题