Asp.net mvc 4 通过复选框将模型传递回控制器时返回空

Asp.net mvc 4 通过复选框将模型传递回控制器时返回空,asp.net-mvc-4,razor,Asp.net Mvc 4,Razor,试图掌握如何将以下数据作为模型传回控制器。我希望使用该模型,然后将所有内容添加到数据库中。当我将表单提交回控制器时,模型是空的。是不是因为其他东西都是空的?我是否必须将所有其他内容作为隐藏字段传递回去?在进入控制器之前,我如何在视图中对这些内容进行排序 我的控制器基本上是将一个xml文件反序列化到视图中 <category> <id>1</id> <description>movies</description>

试图掌握如何将以下数据作为模型传回控制器。我希望使用该模型,然后将所有内容添加到数据库中。当我将表单提交回控制器时,模型是空的。是不是因为其他东西都是空的?我是否必须将所有其他内容作为隐藏字段传递回去?在进入控制器之前,我如何在视图中对这些内容进行排序

我的控制器基本上是将一个xml文件反序列化到视图中

<category>
    <id>1</id>
    <description>movies</description>
    <genre>
        <genres>
            <id>1</id>
            <name>comedy</name>
        </genres>
        <genres>
            <id>2</id>
            <name>action</name>
        </genres>
        <genres>
            <id>3</id>
            <name>adventure</name>
        </genres>
        <genres>
            <id>4</id>
            <name>drama</name>
        </genres>
        <genres>
            <id>5</id>
            <name>romance</name>
        </genres>
    </genres>
</category>

1.
电影
1.
喜剧片
2.
行动
3.
冒险
4.
戏剧
5.
浪漫
视图/窗体如下所示

   <form>
   <ul>
   @for (int x = 0; x < Model.categories[i].genres.Count(); x++)
   {
      <li>
           <label for="@Model.categories[i].genres[x].name">
           <input type="checkbox" name="@Model.categories[i].genres[x].name" value="@Model.categories[i].genres[x].id" checked="@Model.categories[i].genres[x].selected" /> @Model.categories[i].genres[x].name
           </label>
      </li>
    }
    </ul>
    </form>

    @对于(int x=0;x @Model.categories[i].流派[x].名称 }

尝试使用CheckboxFor代替输入标记


至于代码,您没有与复选框关联的ID。您应该如何在控制器中接收它?

为所有复选框指定一个固定名称,如GenreIds

然后,在您的操作中,您应该收到一个
string[]genreIds
参数

过帐表单时,genreid作为am数组过帐,因此必须在数组参数中接收

如果由于您有许多类别,并且希望在其自己的类别中接收每组GenReid,因此这不起作用,那么您可以发送表单值的JSON表示,并在服务器端接收和反序列化它。为此:

在razor模板上:

  • 使用流派名称命名每个类别中的所有复选框
  • 处理表单sumit事件,以及:

  • 使用,将所有表单元素放入一个数组中
  • 然后使用将此数组转换为JSON格式
  • 最后,将此字符串复制到具有固定名称的隐藏字段中,并发布表单。即,在名为“serializedFormValues”的隐藏字段中
  • 在服务器端:

  • 向操作中添加一个名为“serializedFormValues”的参数,类型为string
  • 获取此参数的值并反序列化接收到的JSON字符串,然后在服务器端使用它
  • 如果您使用JSON.NET,则可以转换或。还有另外一种可能性

    请记住,在任何情况下,类型ID都将始终是
    string[]
    (或者
    int
    ,如果是ti的话),并且该数组将只包含选中的值


    最后一个可能性是“手动”处理
    请求。但这更难做到。

    我将其作为值传递回去