Asp.net mvc 4 单击复选框时传递其他值

Asp.net mvc 4 单击复选框时传递其他值,asp.net-mvc-4,razor,checkbox,formcollection,checkboxfor,Asp.net Mvc 4,Razor,Checkbox,Formcollection,Checkboxfor,我想在单击复选框时传递其他值。 我的代码如下 foreach (var item in Model) { <td> @Html.CheckBox("Project", false, new { item.ProjectId}) </td> } 在Var测试中我得到真或假 是否有任何方法可以获取投影ID???我假设您希望在选中复选框的情况下获取投影ID <t

我想在单击复选框时传递其他值。 我的代码如下

    foreach (var item in Model) {

              <td>
                    @Html.CheckBox("Project", false, new { item.ProjectId})
                </td>
}
Var测试中我得到


是否有任何方法可以获取投影ID???

我假设您希望在选中复选框的情况下获取投影ID

<td>
    @Html.Hidden("projectId", item.ProjectId)
    @Html.CheckBox("selected", false)
</td>

[HttpPost]
public ActionResult Test(int projectId, bool selected)
{
    if (selected)
    {
        ///use your projectId

@隐藏(“projectId”,item.projectId)
@复选框(“选中”,false)
[HttpPost]
公共行动结果测试(int projectId,选择bool)
{
如果(选定)
{
///使用你的投影

帮助程序的
复选框和
复选框用于bool和bool?属性(事实上,如果查看源代码,您将看到它们强制将属性值强制转换为
bool?
。请检查方法
InputHelper

对于
复选框
助手,输出如下:

<input id="Foo" name="Foo" type="checkbox" value="true">
<input name="Foo" type="hidden" value="false">
public static class CustomHelpers
{
    public static MvcHtmlString CheckBoxNonBooleanFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, object checkedValue)
    {
        var fieldName = ExpressionHelper.GetExpressionText(expression);
        var fullBindingName = html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(fieldName);
        var fieldId = TagBuilder.CreateSanitizedId(fullBindingName);

        var metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
        var value = metadata.Model;

        TagBuilder tag = new TagBuilder("input");
        tag.Attributes.Add("name", fullBindingName);
        tag.Attributes.Add("id", fieldId);
        tag.Attributes.Add("type", "checkbox");
        tag.Attributes.Add("value", (checkedValue ?? true).ToString());
        if ((checkedValue != null && checkedValue.Equals(value))
            ||(checkedValue == null && value == null ))
        {
            tag.Attributes.Add("checked", "checked");
        }

        var validationAttributes = html.GetUnobtrusiveValidationAttributes(fullBindingName, metadata);
        foreach (var key in validationAttributes.Keys)
        {
            tag.Attributes.Add(key, validationAttributes[key].ToString());
        }

        return new MvcHtmlString(tag.ToString());
    }
} 
它将生成以下html,为您处理元数据属性、名称、选中属性等

<input id="Foo" name="Foo" type="checkbox" value="132" data-val="true" data-val-number="The field Foo must be a number.">

如果需要,您可以通过添加另一个参数uncheckedValue轻松地对其进行扩展,该参数将在复选框保持未选中状态时添加一个具有所需值的隐藏输入字段。您还可以添加htmlAttributes参数,以允许您传递其他随机html属性


最后,请再次检查单选按钮是否符合您的要求,因为同一字段很容易有多个具有不同int值的单选按钮。

我以前从未使用过collection。如果将其更改为Request.Form[“Project”],您会得到什么?
public static class CustomHelpers
{
    public static MvcHtmlString CheckBoxNonBooleanFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, object checkedValue)
    {
        var fieldName = ExpressionHelper.GetExpressionText(expression);
        var fullBindingName = html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(fieldName);
        var fieldId = TagBuilder.CreateSanitizedId(fullBindingName);

        var metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
        var value = metadata.Model;

        TagBuilder tag = new TagBuilder("input");
        tag.Attributes.Add("name", fullBindingName);
        tag.Attributes.Add("id", fieldId);
        tag.Attributes.Add("type", "checkbox");
        tag.Attributes.Add("value", (checkedValue ?? true).ToString());
        if ((checkedValue != null && checkedValue.Equals(value))
            ||(checkedValue == null && value == null ))
        {
            tag.Attributes.Add("checked", "checked");
        }

        var validationAttributes = html.GetUnobtrusiveValidationAttributes(fullBindingName, metadata);
        foreach (var key in validationAttributes.Keys)
        {
            tag.Attributes.Add(key, validationAttributes[key].ToString());
        }

        return new MvcHtmlString(tag.ToString());
    }
} 
@Html.CheckBoxNonBooleanFor(m => m.Foo, 132)
<input id="Foo" name="Foo" type="checkbox" value="132" data-val="true" data-val-number="The field Foo must be a number.">