tag route net data asp all asp.net-mvc asp.net-core asp.net-core-mvc tag-helpers

asp.net-mvc - data - net core asp route id



Ayudantes de etiqueta de botón de radio en ASP.NET 5 MVC 6 (2)

No veo ninguna etiqueta de ayuda para los botones de opción en ASP.NET 5 MVC 6. ¿Cuál es la forma correcta de manejar los elementos de formulario donde necesito usar los botones de opción?


Hay un TagHelper para todos los tipos de entrada que también incluye el tipo de botón de opción. Asumiendo que tienes un modelo de vista como este

public class CreateUserVm { public string UserName { set; get; } public IEnumerable<RoleVm> Roles { set; get; } public int SelectedRole { set; get; } } public class RoleVm { public int Id { set; get; } public string RoleName { set; get; } }

Y en tu acción GET,

public IActionResult Index() { var vm = new CreateUserVm { Roles = new List<RoleVm> { new RoleVm {Id = 1, RoleName = "Admin"}, new RoleVm {Id = 2, RoleName = "Editor"}, new RoleVm {Id = 3, RoleName = "Reader"} } }; return View(vm); }

En la vista, simplemente puede utilizar el marcado para la etiqueta de entrada.

@model YourNamespaceHere.CreateUserVm <form asp-action="Index" asp-controller="Home"> <label class="label">User name</label> <div class="col-md-10"> <input type="text" asp-for="UserName" /> </div> <label class="label">Select a Role</label> <div class="col-md-10"> @foreach (var item in Model.Roles) { <input asp-for="SelectedRole" type="radio" value="@item.Id" /> @item.RoleName } </div> <input type="submit" /> </form>

Cuando publique su formulario, la identificación de Rold para el rol seleccionado estará en la propiedad SelectedRole

Tenga en cuenta que, el código de afeitado anterior generará un elemento de entrada con el mismo valor de atributo de Id y valor de atributo de name para cada entrada generada por el bucle. En el ejemplo anterior, generará 3 elementos de entrada (tipo de botón de opción) con el valor de atributo Id y name establecido en SelectedRole . El enlace del modelo funcionará cuando el valor del atributo de name coincida con el nombre de la propiedad ( SelectedRole ) en nuestro modelo de vista, pero los valores de atributo de Id. Duplicados pueden causarle problemas con el código del lado del cliente (las Id en un documento no son válidas)


Si bien hay soluciones para usar asp-for="SomeField" , encontré que la solución más sencilla era hacer coincidir un campo de modelo de vista con el campo de name del botón de opción.

Ver Modelo:

public class MyViewModel { public string MyRadioField { get; set; } }

Forma (sin etiquetas para mayor claridad):

@model MyViewModel <form asp-action="SomeAction" asp-controller="SomeController"> <input type="radio" name="MyRadioField" value="option1" checked /> <input type="radio" name="MyRadioField" value="option2" /> <input type="radio" name="MyRadioField" value="option3" /> <input type="submit" /> </form>

Cuando se envía el formulario, MyRadioField se llena con el valor del botón de opción marcado.