2013-07-25 14 views
6

Ho un modulo con 2 campi un elenco a discesa e una casella di controllo. Ho tutto funziona correttamente, ma non posso per qualche motivo ottenere il valore di una casella di controllo se è selezionata questo è il mio codice ..mvc3 valore casella di controllo dopo invio

[HttpPost] 
    public ActionResult view(string pick) 
    { 

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

     } 
     return View(); 
    } 

Questa è la mia opinione

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


} 
} 

Fondamentalmente il dropdownlist ha 2 opzioni che sono Accetta e Deny Posso catturare quale utente l'utente sceglie tramite il SWITCH-case nel controller ora come posso acquisire il valore delle caselle di controllo? Se noti che le caselle di controllo hanno una variabile denominata @groupRequestID così ogni casella di controllo ha un valore univoco diverso come 1,2,3 ecc. Qualsiasi aiuto sarebbe molto apprezzato !!

Il Modello

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; } 
} 
+0

come è il tuo modello? Inoltre, naybe dare alle caselle di controllo un nome generico come "selectedGroupRequestIds", quindi accettare "IEnumerable selectedGroupRequestIds' nella tua azione? –

+0

Ho appena modificato il mio messaggio e ho messo il modello e ok vedo quello che stai dicendo dare loro un nome comune e selezionare i valori selezionati usando GrouprequestID. Proverò che – user1591668

risposta

17

Caselle una volta inviati al server di agire un po 'strano. Se una casella è selezionata il browser invierà name=value come in

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

Ma non se la casella è controllato il server non invia nulla.

<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" /> 

si tradurrà in Check1 = Hello

Ciò significa se tutti i tuoi caselle di controllo sono legati, nominando loro lo stesso popoleranno lo stesso attributo del vostro ActionMethod. Se quell'attributo è un'enumerazione, conterrà solo quelli che sono stati controllati.

Se avete questo nella vista:

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

e questo come metodo di azione del controller:

public ActionMethod MyAction(IEumerable<int> myValues) 

La variabile myValues sarà simile a questo:

myValues[0] == 1 

È dovrebbe anche notare che se si utilizza l'estensione helper Html:

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

Dove MyValue è un bool l'estensione creerà un tag checkbox ingresso e anche un tag hidden ingresso con lo stesso nome, ossia un valore sarà sempre passato al metodo di controllo.

Spero che questo aiuti.

+0

perfetto grazie per la risposta che ha chiarito tutto e il codice è lavorando !! – user1591668

+0

+1 per una risposta pulita ..... –

Problemi correlati