Javascript 将动态生成的复选框的结果作为字符串传递给控制器

Javascript 将动态生成的复选框的结果作为字符串传递给控制器,javascript,c#,asp.net-mvc,Javascript,C#,Asp.net Mvc,我试图在提交表单时将多个复选框的状态作为字符串传递(当有人选中复选框时由JS更新),而不是遍历控制器中的每个值。我做错了什么?我试过: @model UserClaimsViewModel; <script> function callme(val) { var t = ""; $('#MyDiv input:checked').each(function () { t += this + ","; }); @Model.CoIDs=

我试图在提交表单时将多个复选框的状态作为字符串传递(当有人选中复选框时由JS更新),而不是遍历控制器中的每个值。我做错了什么?我试过:

@model UserClaimsViewModel;

<script>
  function callme(val) {
    var t = "";
    $('#MyDiv input:checked').each(function () {
      t += this + ",";
    });
    @Model.CoIDs=t;
    @Html.HiddenFor(m => m.CoIDs);
      console.log("coids updated to: " +@Model.CoIDs);
  }
</script>


@Model.email
<br />
@using (Html.BeginForm())
{
    @Html.HiddenFor(m => m.email) 
    <div class="panel-body" id="MyDiv">
        <table>
            @foreach (var t in Model.CoIDs.Split(','))
            {
                <tr>
                    <td>
                        <input type="checkbox" onchange="callme(@t)" name="@t" id="@t">@t
                    </td>
                </tr>
            }
        </table>
    </div>
    <input type="submit" value="Submit Changes" />
}
@model UserClaimsViewModel;
函数callme(val){
var t=“”;
$('#MyDiv输入:选中')。每个(函数(){
t+=这个+“,”;
});
@模型CoIDs=t;
@HiddenFor(m=>m.CoIDs);
log(“COID更新为:”+@Model.coid);
}
@Model.email

@使用(Html.BeginForm()) { @Html.HiddenFor(m=>m.email) @foreach(Model.CoIDs.Split(',')中的变量t) { @t } }
错误:

UserClaimEditView?用户电子邮件=a@gmail.com:78未捕获引用错误:赋值中的左侧无效

选中复选框后出错:

UserClaimEditView?用户电子邮件=a@gmail.com:65未捕获引用错误:未定义callme 在HTMLInputElement.onchange(UserClaimEditView?userEmail=a@gmail.com:65)


callme(val)
:你从未使用过
val
,为什么?@Marco,我是通过
这个
来使用它的,不是吗?你的代码错误百出。首先
指的是复选框元素,而不是其值。你的
@Model.CoIDs=t
毫无意义,请查看您生成的实际html以理解。razor是服务器端代码,而jQuery是客户端代码,因此无论如何都不能用javascript变量更新服务器端变量。因此,每次切换复选框时尝试构建字符串,而不是提交表单时仅构建一次,这是资源浪费。在任何情况下,您现在向服务器发送的数据都是原来的两倍。通过生成表示所需内容的视图模型并生成复选框列表来实现此属性(参见示例