mvc3 checkbox value after submit

2019-04-28 11:30发布

问题:

I have a form with 2 fields a dropdownlist and a checkbox. I have everything working correctly but i can not for some reason obtain the value of a checkbox if it is checked this is my code..

[HttpPost]
    public ActionResult view(string pick)
    {

        switch (pick)
        {
            case "Deny":
                // capture checkbox value here
                break;
            case "Accept":
                // capture checkbox value here
                break;

        }
        return View();
    }

This is my view

@using (Html.BeginForm("view", "grouprequest", FormMethod.Post, new {}))
{


 @Html.DropDownList("pick", new SelectList(new List<Object>{ 
                new{ Text ="Accept", Value= "Accept"},new{ Text ="Deny", Value= "Deny"}},    "Value", "Text"), new {})

 <input type="submit" name="work" id="work" value="Update" style="font-size:16px" />

foreach (var item in Model)
{
 <input type="checkbox" id="@item.grouprequestID" name="@item.grouprequestID"  value="@item.grouprequestID" />


}
}

Basically the dropdownlist has 2 options which are Accept and Deny I can capture which one the user chooses via the SWITCH-case in the controller now how can I capture the value of the checkboxes? If you notice the Checkboxes have a variable to them named @groupRequestID so every checkbox has a different unique value like 1,2,3 etc.. any help would be greatly appreciated !!

The Model

 public class grouprequest
{
    [Key]
    public int grouprequestID { get; set; }
    public int? profileID { get; set; }
    public int? registrationID { get; set; }
    public DateTime expires { get; set; }
    public int? Grouplink { get; set; }
}

回答1:

Check boxes when posted to the server act a little strange. If a box is checked the browser will send name=value as in

<input type="checkbox" name="name" value="value" />

But if the checkbox is not checked the server doesn't send anything.

<input type="checkbox" name="Check1" id="Checks1" value="Hello" checked="checked"/>
<input type="checkbox" name="Check1" id="Checks1" value="Hello1" />
<input type="checkbox" name="Check1" id="Checks1" value="Hello2" />

Will result in Check1 = Hello

What this means is if all your check boxes are related, naming them the same will populate the same attribute of your ActionMethod. If that attribute is an enumeration it will contain only the ones that are checked.

If you have this in your view:

<input type="checkbox" name="MyValues" value="1" checked="checked"/>
<input type="checkbox" name="MyValues" value="2" />
<input type="checkbox" name="MyValues" value="3" />

and this as your controller action method:

public ActionMethod MyAction(IEumerable<int> myValues)

The myValues variable will look like this:

myValues[0] == 1

You should also note that if you are using the Html helper extension:

@Html.CheckBoxFor(m => m.MyValue)

Where MyValue is a bool the extension will create a checkbox input tag and also a hidden input tag with the same name, meaning a value will always be passed into the controller method.

Hope this helps.