wake-up-neo.com

Übergeben Sie die Werte von checkBox an die Controller-Aktion in asp.net mvc4

Ich möchte testen, ob das Kontrollkästchen von meinem acion methon aktiviert ist oder nicht. Ich muss den Kontrollkästchen-Wert von der Ansicht an den Controller übergeben

das ist meine Ansicht 

   @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>

und ich versuche das:

 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);

    }

, aber ich habe diesen Fehler:

Der Parameterwert der Parameter ist leer Der Parameter "checkAct" des Typs ist nicht Nullable "System.Boolean" pour la méthode "System.Web.Mvc.ActionResult Index (System.String, System.String, Boolean)» Projekt .Controller.GrapheController ». Ein Parameter für die Eingabe eines Typs für einen Typ mit einem Rückgabewert, ein Typ und eine Null-Einstellung oder ein Parameter für den Parameterzugang . Parameter-Parameter

Kannst du mir bitte helfen !

20
Nancy

Wenn ein Kontrollkästchen aktiviert ist, enthalten die Postback-Werte ein Schlüsselwertpaar der Form [InputName]=[InputValue].

Wenn ein Kontrollkästchen nicht markiert ist, enthält das veröffentlichte Formular überhaupt keinen Hinweis auf das Kontrollkästchen.

Wenn Sie dies wissen, wird Folgendes funktionieren:

Im Auszeichnungscode:

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

Und die Unterschrift Ihrer Aktionsmethode:

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

Dies funktioniert, da das Postback bei Aktivierung des Kontrollkästchens checkResp=true enthält. Wenn das Kontrollkästchen nicht aktiviert ist, wird der Parameter standardmäßig auf "false" gesetzt.

54
Andrew Shepherd

Aus irgendeinem Grund funktionierte die Methode von Andrew, das Kontrollkästchen von Hand zu erstellen, nicht für Mvc 5. Ich habe es stattdessen verwendet 

@Html.CheckBox("checkResp")

erstellen eines Kontrollkästchens, das Nice mit dem Controller spielen würde.

13
Philip Pittle

versuchen Sie es mit Formularsammlung 

<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);
     }

}
9
COLD TOLD

Keine der vorherigen Lösungen funktionierte für mich ... Endlich stellte ich fest, dass die Aktion als ...

public ActionResult Index(string MyCheck = null)

und wenn diese Option aktiviert ist, war der übergebene Wert "on", nicht "true". Sonst ist es immer null.

Hoffe, es hilft irgendwann.

3

Wenn Sie möchten, dass Ihr Wert beim Senden des Formulars vom MVT-Controller gelesen wird und Sie nicht wissen, was mit verborgenen Eingaben zu tun ist. Sie können das value-Attribut zu Ihrer checkbox hinzufügen und es auf true oder false setzen. 

MVT erkennt die viewModel-Eigenschaft myCheckbox hier nicht als true

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

aber wenn Sie hinzufügen 

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

Skript, das es tut:

$(document).on("click", "[type='checkbox']", function(e) {
        if (this.checked) {
            $(this).attr("value", "true");
        } else {
            $(this).attr("value","false");}
    });
3
 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");
        }
0
kalpesh patel

Ich hatte ein Problem mit den meisten Lösungen, da ich versuchte, ein Kontrollkästchen mit einem bestimmten Stil zu verwenden. Ich brauchte die Werte des Kontrollkästchens, um sie aus einer Liste zum Posten zu senden, sobald die Werte gesammelt wurden, um sie zu speichern. Ich habe es nach einiger Zeit geschafft, es zu umgehen.

Ich hoffe es hilft jemandem ... Hier ist der Code unten:

Regler:

    [HttpGet]
    public ActionResult Index(List<Model> ItemsModelList)
    {

        ItemsModelList = new List<Model>()
        {                
            //example two values
            //checkbox 1
            new Model{ CheckBoxValue = true},
            //checkbox 2
            new Model{ CheckBoxValue = false}

        };

        return View(new ModelLists
        {
            List = ItemsModelList

        });


    }

    [HttpPost]
    public ActionResult Index(ModelLists ModelLists)
    {
        //Use a break point here to watch values
        //Code... (save for example)
        return RedirectToAction("Index", "Home");

    }

Modell 1:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;

    namespace waCheckBoxWithModel.Models
    {
        public class Model
{

    public bool CheckBoxValue { get; set; }

}
    }

Modell 2:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;

    namespace waCheckBoxWithModel.Models
    {
        public class ModelLists
{

    public List<Model> List { get; set; }

}
    }

Ansicht (Index):

    @{
ViewBag.Title = "Index";

@model waCheckBoxWithModel.Models.ModelLists
    }
    <style>

.checkBox {
    display: block;
    position: relative;
    margin-bottom: 12px;
    cursor: pointer;
    font-size: 22px;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}

    /* hide default checkbox*/
    .checkBox input {
        position: absolute;
        opacity: 0;
        cursor: pointer;
    }

/* checkmark */
.checkmark {
    position: absolute;
    top: 0;
    left: 0;
    height: 25px;
    width: 25px;
    background: #fff;
    border-radius: 4px;
    border-width: 1px;
    box-shadow: inset 0px 0px 10px #ccc;
}

/* On mouse-over change backgroundcolor */
.checkBox:hover input ~ .checkmark {
    /*background-color: #ccc;*/
}

/* background effect */
.checkBox input:checked ~ .checkmark {
    background-color: #fff;
}

/* checkmark (hide when not checked) */
.checkmark:after {
    content: "";
    position: absolute;
    display: none;
}

/* show checkmark (checked) */
.checkBox input:checked ~ .checkmark:after {
    display: block;
}

/* Style checkmark */
.checkBox .checkmark:after {
    left: 9px;
    top: 7px;
    width: 5px;
    height: 10px;
    border: solid #1F4788;
    border-width: 0 2px 2px 0;
    -webkit-transform: rotate(45deg);
    -ms-transform: rotate(45deg);
    transform: rotate(45deg);
}
   </style>

    @using (Html.BeginForm())
    {

    <div>

@{
    int cnt = Model.List.Count;
    int i = 0;

}

@foreach (var item in Model.List)
{

    {
        if (cnt >= 1)
        { cnt--; }
    }

    @Html.Label("Example" + " " + (i + 1))

    <br />

    <label class="checkBox">
        @Html.CheckBoxFor(m => Model.List[i].CheckBoxValue)
        <span class="checkmark"></span>
    </label>

    { i++;}

    <br />

}

<br />
<input type="submit" value="Go to Post Index" />    

    </div>

    }
0
Nelson Martins

setze den Wert in der Checkbox wie folgt:

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

ändern Sie checkResp in Ihrem Modell wie folgt in nullable:

public Nullable<bool> checkResp{ get; set; }

verwenden ? vor dem checkResp like:

public ActionResult Index( string responsables, bool ? checkResp)
{
 ......
}
0
Omid Soleiman

Sie sollten Ihre Ansichten stark eingeben. Dann können Sie das tun:

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

In Ihrer Ansicht können Sie ein Kontrollkästchen erstellen, das an diesen booleschen Wert bindet:

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

Wenn es aktiviert ist, ist die Modelleigenschaft true.

Für Ihr unmittelbares Problem ... müssen Sie jedoch das Ankreuzfeld mit demselben Namen wie die Parameter Ihrer Aktionsmethode benennen. Sie sollten bool sein. 

0
Simon Whitehead

Verwenden Sie für die MVC Controller-Methode einen nullwertfähigen booleschen Typ:

public ActionResult Index (String Responsables, bool? checkResp) {etc.}

Wenn das Kontrollkästchen aktiviert ist, ist checkResp wahr. Wenn nicht, ist es null.

0
Daniel King
<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");
        }
0
kalpesh patel