通过jquery/ajax将控制器的复选框值传递给控制器​​

问题描述:

我有一个.NET MVC应用程序。我正在尝试使用jquery ajax将数据发布到我的控制器。似乎一切工作基于查看Firebug控制台(我可以在我的发布请求中看到数组中的值),但在控制器中,IEnumerable STRMSelected为null。任何想法,我在做什么错?通过jquery/ajax将控制器的复选框值传递给控制器​​

enter image description here

局部视图

@if (Model.Count() > 0) 
    { 

     foreach (var item in Model) 
     { 
      //int countAU = 1, countSP = 1, countSU = 1; 
      string nameAU = "AU" + @item.year; 
      string nameSP = "SP" + @item.year; 
      string nameSU = "SU" + @item.year; 
      <tr> 
       <td style="text-align:center;"> 
        <strong><label> @item.year</label></strong> 
       </td> 

       <td style="text-align:center;"> 


        @if (@item.AU != null) 
        { 
         <input type="checkbox" [email protected] id="@nameAU" value="@item.AU" /> 
         //countAU++; 
        } 
        else 
        { 
         <input type="checkbox" name="AUNonex" id="AUNone" disabled /> 
        } 

       </td> 
      </tr> 
      } 
     } 

主视图

<div class="gradfacapp-samerow"> 
     <input type="submit" value="Save Request for Later" name="action:Save" class="cancel" /> 

     <input type="submit" value="Submit Request" id="submit" name="action:Submit" onclick="javascript:return checkSubmit();" /> 
</div> 


<script> 
$('#submit').on('click', function() { 
     var STRMS = []; 
     $('input:checked').each(function() { 
      STRMS.push($(this).attr("value")); 
     }); 
     $.ajax({ 
      type: "POST", 
      url: '@Url.Action("Submit", "FeeAuth")', 
      dataType: "html", 
      contentType: "application/json; charset=utf-8", 
      data: JSON.stringify({ STRMSelected: STRMS }), 
      success: 
       function (data) { } 

     }); 
    }); 
</script> 

控制器

[HttpPost] 
    [MultipleButton(Name = "action", Argument = "Submit")] 
    public ActionResult Submit(FA fee, HttpPostedFileBase upfile, IEnumerable<string> STRMSelected) 
    {    
      code is here 
    } 

我注意到,在Ajax调用你的两次设定数据:

data: data, 
data: JSON.stringify({ STRMSelected: STRMS }), 

如果这不是问题,你总是可以换行输入的形式,然后使用

var formData = $("#myFormName").serializeArray(); 
var selectedItems = JSON.stringify(formData); 

然后在Ajax调用中使用:

data: selectedItems, 
+0

我删除数据:数据,但它仍然在控制器中显示为空。我添加了Firebug的帖子截图。 – user2448412

+0

尝试将STRMSelected输入更改为字符串,然后在控制器中对其进行反序列化以获得所需的特定值 – Simon

删除contentType: "application/json; charset=utf-8",并更改

data: JSON.stringify({ STRMSelected: STRMS }),以data: { STRMSelected: STRMS},没有必要将数据发送为json所以你的Ajax会

$.ajax({ 
      type: "POST", 
      url: '@Url.Action("Submit", "FeeAuth")', 
      dataType: "html", 
      data: { STRMSelected: STRMS}, 
      success: 
       function (data) { } 

     }); 

编辑

还可以防止默认提交

$('#submit').on('click', function (e) { 
e.preventDefault(); 
+0

尝试了此建议,并且仍然是控制器中的空值。 – user2448412

+0

@ user2448412你可以尝试设置'async:false,' – Usman

+0

仍然将null传递给控制器​​。 – user2448412