D'entrée de type case à cocher avec MVC, razor
Pourquoi est la valeur de ma case pas passé à mon ViewModel?
Mon point de Vue (j'ai omis les balises input ne sont pas pertinentes pour ce post):
@model Pro.WebUI.ViewModels.UserViewModel
@using (Html.BeginForm("ManageUsers", "Administration", FormMethod.Post,
new { id = "request-form", @class = "form-horizontal" }))
{
<div class="form-group">
<label for="inputAuthorize" class="col-lg-2 control-label">Authorize</label>
<div class="col-lg-8">
<input type="checkbox" id="Authorized" name="Authorized" value="@Model.Authorized" />
</div>
</div>
<div class="form-group">
<div class="col-lg-10 col-lg-offset-2">
<br /><br />
<button type="submit" class="btn btn-primary">Submit Request</button>
</div>
</div>
}
Mon ViewModel:
public class UserViewModel
{
[Key]
public string UserID { get; private set; }
public string UserName { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public bool Authorized { get; set; }
public string Email { get; set; }
public string Phone { get; set; }
public string Notes { get; set; }
}
Mon Contrôleur:
[HttpPost]
public ActionResult ManageUsers(UserViewModel model)
{
if (ModelState.IsValid)
{
ProcurementUser obj = new ProcurementUser();
obj.UserName = model.Email;
obj.FirstName = model.FirstName;
obj.LastName = model.LastName;
obj.Email = model.Email;
obj.Phone = model.Phone;
obj.Authorized = model.Authorized;
UserRepository.SaveUser(obj);
//success message
}
return View(model);
}
Je n'ai pas toutes les balises input, mais lorsque j'entre le code sans la case, toutes les valeurs sont transmises. J'ai regardé d'autres case des questions sur les forces spéciales, mais ils utilisent le plus souvent l' @Html.Case à cocher ou @Html.CheckboxFor. Je voudrais juste utiliser input type="checkbox"
Décoché les cases ne postez pas de retour. Il y a une très bonne raison à fortement typé aides à la création de votre html - ils le faire correctement!
Html.Case à cocher ou Html.CheckboxFor créer une case à cocher d'entrée... mais génère tout le code nécessaire pour le faire (Id génère comme il doit l'être, et aussi Caché avec le même nom de gérer les cases non cochées).
Je suggère également que vous vérifiez le html généré (en particulier la
bonne info, merci. L'étiquette est juste une partie de l'bootstrap modèle.
plus de la bonne info, je ne connaissais pas le Caché.
Html.Case à cocher ou Html.CheckboxFor créer une case à cocher d'entrée... mais génère tout le code nécessaire pour le faire (Id génère comme il doit l'être, et aussi Caché avec le même nom de gérer les cases non cochées).
Je suggère également que vous vérifiez le html généré (en particulier la
value
attribut pour le true
et false
cas) et il doit être clairement indiqué. Et quel est le point de <label for="inputAuthorize" ...>
- votre case a name="Authorized"
, pas name="inputAuthorize"
! Toujours utiliser le fortement typé html helpers!bonne info, merci. L'étiquette est juste une partie de l'bootstrap modèle.
plus de la bonne info, je ne connaissais pas le Caché.
OriginalL'auteur JoshYates1980 | 2014-12-15
Vous devez vous connecter pour publier un commentaire.
Comme il a été fait allusion dans les commentaires le problème que vous rencontrez, c'est que vous n'êtes pas vraiment la création de votre case correctement:
En supposant que votre modèle a
Authorized = true
votre mark-up serait:De même, la
false
état dansMais ce ne sont pas "vérifié" cases à cocher: ils sont encore "unchecked", et ont besoin de la
checked
attribut de paramètre:De Stephen points - une décoché la case n'allons pas envoyer des données vers le serveur afin que vous ne soyez pas confus au sujet de laquelle les options sélectionnées.
Enfin, comme il a été noté, votre
<label>
élément est un champ inexistant à la recherche pourinputAuthorize
au lieu deAuthorized
.Toutes ces questions devraient être pris en charge pour vous si vous utilisez l'
@Html.CheckboxFor
et@Html.LabelFor
helper classes.OriginalL'auteur Zhaph - Ben Duguid
Si nous avons besoin d'utiliser
<input>
déposée au lieu de@Html.CheckboxFor
, nous pouvons utiliser"checked=\"checked\""
syntaxe comme dans ce code:En fait je l'ai trouvé en suivant ce asp.net tutoriel. Regarder vers le bas au bas de ce tutoriel.
OriginalL'auteur Dush