我们如何知道在MVC5中从Controller中查看哪个@HTML.CheckBox()

时间:2016-05-30 16:45:00

标签: javascript c# asp.net-mvc

我花了很多天试图将信息从View传递给Controller 使用/{page-id}?fields=name,fan_count

我有一个textarea和一个复选框循环(我们不知道有多少)。 我可以管理textarea而不是复选框。

观点:

@Html.CheckBox()

我可以尝试使用" type = checkbox"

使用正常的html代码

控制器:

    @using (Html.BeginForm("ProviderConfigurationTool", "Admin"))
    {
        <div>
            <strong>Custom Rule </strong>
            @Html.TextArea("CustomRule", new { rows = 12, columns = 30 })
            <br />
        </div>
        foreach (var item in ViewBag.farmlist)
        {
                    <table>
                        <tr>
                            <td style="border-bottom: solid 1px #EBEFF6">
                                <p>@item</p>
                                @Html.CheckBox("@item");
                                <!-- <input id="@item" name="@item" type="checkbox" onclick="addingFarms('@item')" class="farms" /> -->
                            </td>
                        </tr>
                    </table>
          }

            <input type="submit" value="Submit and close" onclick="refreshParent();self.close()" />

    }
    @{Html.EndForm();}

另一个想法是使用javascript并尝试创建一个List以传递给控制器​​,就像那样

查看:
  [HttpPost] public ActionResult Create(string CustomRule, FormCollection collection) { string results = collection["Blanks"]; // it does not work newRule.Key = CustomRule; // it works }

input id="@item" name="@item" type="checkbox" onclick="getFarms('@item')" class="farms"

如果有人已经遇到这个问题或有想法,请帮助我!

2 个答案:

答案 0 :(得分:2)

显然,HTML表单用于收集用户输入。对于复选框,value属性仅在提交表单时有意义。如果在提交表单时复选框处于选中状态,则复选框的名称将与value属性的值一起发送(如果未选中复选框,则不发送任何信息)。因此,如果为复选框指定名称,则Controller将接收和数组 按名称检查的值。因此,复选框的声明应该是这样的。

<input name="checkboxes" type="checkbox" value="@item" />

和您的控制器

public ActionResult Create(string customRule, string[] checkboxes) 
{
    ...
}

checkboxes包含所有已检查的值。

答案 1 :(得分:2)

你可以使用ajax。 在.cshtml页面中:

<input type='checkbox' name='ch' value='@item'>

在JQuery中:

var it=$('ch:checked').serialize();  $.ajax('yourcontoroller/youractionname',it)

在您的控制器中:

public ActionResult Create(string customRule, string[] ch) 
{
    ...
}