Передать значения checkBox в действие контроллера в asp.net mvc4

Я хочу проверить, установлен ли флажок или нет из моего метода methion, мне нужно передать значение флажка из представления в контроллер

это мой взгляд

   @using (Html.BeginForm("Index", "Graphe"))
    {

           <table style="width: 100%;" border="1">
          <tbody>
          <tr>
          <td>Responsable:</td>
          <td><select id="Responsables" name="responsables"  ><option>Selectionnez --</option></select></td>
           <td><input id="responsable" name="checkResp" type="checkbox" /> </td>
</tr>
               <tr> <td><input type="submit" value="Afficher" id="ButtonSubmit"/></td>

                <td><input class="button" id="ButtonReset" type="button" value="Annuler"  /></td>
            </tr>
</tbody>

и я попробую:

 public ActionResult Index( string responsables, bool checkResp)
    {
        Highcharts chart = new Highcharts("chart");

        if (responsables != null)
        {

                if (checkResp)
                chart = Global();

                else
                 chart = Resp(responsables);

            }
        else
            chart = Global();
        return View(chart);

    }

но у меня есть эта ошибка:

Le dictionnaire de paramètres contient une entrée Null pour le paramètre "checkAct" de type non Nullable "System.Boolean" pour la méthode "System.Web.Mvc.ActionResult Index (System.String, System.String, Boolean)" dans "Project.Controllers.GrapheController". Un paramètre facultatif doit être un type référence, un type Nullable ou être déclaré en tant que paramètre facultatif. Nom du paramètre: параметры

Можете ли вы мне помочь?

Ответ 1

Если флажок установлен, то значения обратной передачи будут содержать пару ключ-значение формы [InputName]=[InputValue]

Если флажок не установлен, то опубликованная форма вообще не содержит ссылки на этот флажок.

Зная это, будет работать следующее:

В код разметки:

 <input id="responsable" name="checkResp" value="true" type="checkbox" />

И ваша подпись метода действия:

public ActionResult Index( string responsables, bool checkResp = false)

Это будет работать, потому что, когда флажок установлен, postback будет содержать checkResp=true, и если флажок не установлен, параметр будет по умолчанию равным false.

Ответ 2

По какой-то причине метод Andrew для создания флажка вручную не работал у меня с использованием Mvc 5. Вместо этого я использовал этот

@Html.CheckBox("checkResp")

чтобы создать флажок, который будет хорошо работать с контроллером.

Ответ 3

попробуйте использовать коллекцию форм

<input id="responsable" value="True" name="checkResp" type="checkbox" /> 

[HttpPost]
public ActionResult Index(FormCollection collection)
{
     if(!string.IsNullOrEmpty(collection["checkResp"])
     {
        string checkResp=collection["checkResp"];
        bool checkRespB=Convert.ToBoolean(checkResp);
     }

}

Ответ 4

Если вы хотите, чтобы ваше значение считывалось MVT-контроллером при отправке формы, и вы не имеете права заниматься скрытыми вводами. Вы можете добавить атрибут value к вашему checkbox и установить его на true или false.

MVT не будет распознавать свойство viewModel myCheckbox как true здесь

<input type="checkbox" name="myCheckbox" checked="checked" />

но если вы добавите

<input type="checkbox" name="myCheckbox" checked="checked" value="true" />

Script, который делает это:

$(document).on("click", "[type='checkbox']", function(e) {
        if (this.checked) {
            $(this).attr("value", "true");
        } else {
            $(this).attr("value","false");}
    });

Ответ 5

Ни один из предыдущих решений не работал у меня. Наконец, я обнаружил, что действие должно быть закодировано как...

public ActionResult Index(string MyCheck = null)

а затем при проверке переданное значение "on", а не "true". В противном случае он всегда равен нулю.

Надеюсь, что это поможет.

Ответ 6

Вы должны строго набирать свои мнения. Затем вы можете сделать это:

public class YourViewModel {
    public bool ConditionaValue { get; set; }
}

В вашем представлении вы можете создать флажок, который будет привязываться к этому логическому значению:

@Html.CheckBoxFor(x => x.ConditionalValue)

Если он установлен, свойство модели будет истинным.

Для вашей непосредственной проблемы, хотя... вам нужно указать свой флажок, чтобы оно было тем же именем, что и ваши параметры метода действия.. и они должны быть bool..

Ответ 7

Для метода MVC Controller используйте нулевой тип булевых типов:

public ActionResult Index (строка отвечает, bool? checkResp) { и т.п. }

Затем, если флажок установлен, checkResp будет true. Если нет, это будет null.

Ответ 8

<form action="Save" method="post">
 IsActive <input type="checkbox" id="IsActive" checked="checked" value="true" name="IsActive"  />

 </form>

 public ActionResult Save(Director director)
        {
                   // IsValid is my Director prop same name give    
            if(ModelState.IsValid)
            {
                DirectorVM ODirectorVM = new DirectorVM();
                ODirectorVM.SaveData(director);
                return RedirectToAction("Display");
            }
            return RedirectToAction("Add");
        }

Ответ 9

 public ActionResult Save(Director director)
        {
          // IsActive my model property same name give in cshtml
//IsActive <input type="checkbox" id="IsActive" checked="checked" value="true" name="IsActive" 
            if(ModelState.IsValid)
            {
                DirectorVM ODirectorVM = new DirectorVM();
                ODirectorVM.SaveData(director);
                return RedirectToAction("Display");
            }
            return RedirectToAction("Add");
        }