2012-09-15 3 views
0

J'ai le modèle suivant dans mon application mvc3. Je veux avoir deux boutons radio sur la vue qui correspondent à Poids et Quantité (ce sont des champs de bits dans la base de données).MVC3 Html.RadioButton statpost retour au contrôleur

public Unit() 
    { 
     this.OrderLineQuantity = new HashSet<OrderLine>(); 
     this.OrderLineWeight = new HashSet<OrderLine>(); 
    } 

    public int ID { get; set; } 
    public System.Guid UserId { get; set; } 
    public string ShortDescription { get; set; } 
    public string Desciption { get; set; } 
    public System.DateTime AddDate { get; set; } 
    public System.DateTime UpdateDate { get; set; } 
    public Nullable<bool> Weight { get; set; } 
    public Nullable<bool> Quantity { get; set; } 

    public virtual ICollection<OrderLine> OrderLineQuantity { get; set; } 
    public virtual ICollection<OrderLine> OrderLineWeight { get; set; } 

Je le (simplifié) suivant à mon avis de rasoir fortement typé:

@using (Html.BeginForm()) { 
@Html.ValidationSummary(true) 
<fieldset> 
    <legend>Unit</legend> 

    <table> 
     <tr> 
      <td>@Html.LabelFor(model => model.Weight)</td> 
      <td>@Html.LabelFor(model => model.Quantity)</td> 
     </tr> 
     <tr> 
      <td> 
       @Html.RadioButton("unitType", "false", "Weight") 
       @Html.ValidationMessageFor(model => model.Weight) 
      </td> 
      <td> 
       @Html.RadioButton("unitType", "false", "Quantity") 
       @Html.ValidationMessageFor(model => model.Quantity) 
      </td> 
     </tr> 
    </table> 
    <p> 
     <input type="submit" value="Create" /> 
    </p> 
</fieldset> 

}

La question que j'ai est quand je déboguer le poste au contrôleur des valeurs pour les boutons radio sont nuls. Je suis un peu confus car je pense avoir correctement nommé les contrôles dans la vue. Est-ce que quelqu'un peut m'aider s'il vous plaît à faire en sorte que les valeurs soient correctement affichées sur le contrôleur. Merci d'avance.

Répondre

1

Utilisez RadioButtonFor pour que la dénomination du formulaire soit correcte.

@Html.RadioButtonFor(model => model.Weight, "true") 
@Html.RadioButtonFor(model => model.Quantity, "true") 

(Si vous voulez utiliser RadioButton plaine, le premier paramètre doit être le nom de la propriété, comme @Html.RadioButton("Weight", "true"). Mais si devient plus complexe dans les cas comme des classes imbriquées et une vue partielle, ce qui est pourquoi il est conseillé d'utiliser la forme fortement typé comme ci-dessus.)


Modifier Depuis les boutons radio doivent être dans le même groupe, le modèle de vue doit être peaufiné.

@Html.RadioButtonFor(model => model.UnitType, "Weight") 
@Html.RadioButton(model => model.UnitType, "Quantity") 

Ainsi, le modèle a besoin de la propriété UnitType, mais si vous avez encore besoin d'utiliser Weight et Quantity, ils pourraient être mis à jour:

private string _unitType; 

public string UnitType 
{ 
    get { return _unitType; } 
    set 
    { 
     _unitType = value; 
     Weight = (_unitType ?? "").Equals("Weight", StringComparison.CurrentCultureIgnoreCase); 
     Quantity = (_unitType ?? "").Equals("Quantity", StringComparison.CurrentCultureIgnoreCase); 
    } 
} 
+0

Merci, mais cela ne met pas les boutons radio le même groupe alors quand j'en sélectionne un, je peux aussi sélectionner l'autre. C'est pourquoi je n'ai pas utilisé le RadioButtonFor. Y at-il un moyen que je peux utiliser le RadioButtonFor et mais les deux dans le même groupe? – user1476207

+0

@ user1476207 désolé, totalement raté cela. Mise à jour ma réponse – McGarnagle

Questions connexes