vista una tutorial programar paso pasar mvc modelo form español datos controlador c# asp.net-mvc model radio-button boolean

tutorial - pasar datos de una vista a un controlador c#



Botones de radio Sí/No de ASP.NET MVC con modelo MVC fuertemente encuadernado (8)

Agregar etiquetas de etiquetas alrededor de los botones de radio con HTML regular también solucionará el problema ''etiqueta'':

<label><%= Html.RadioButton("blah", !Model.blah) %> Yes</label> <label><%= Html.RadioButton("blah", Model.blah) %> No</label>

Al hacer clic en el texto, ahora se selecciona el botón de opción apropiado.

¿Alguien sabe cómo vincular un botón de opción Sí / No a una propiedad booleana de un modelo fuertemente tipado en ASP.NET MVC?

Modelo

public class MyClass { public bool Blah { get; set; } }

Ver

<%@ Page Title="blah" Inherits="MyClass"%> <dd> <%= Html.RadioButton("blah", Model.blah) %> Yes <%= Html.RadioButton("blah", Model.blah) %> No </dd>

Gracias

SOLUCIÓN:

Gracias a Brian por la dirección, pero fue lo contrario de lo que escribió. Como tal -

<%@ Page Title="blah" Inherits="MyClass"%> <dd> <%= Html.RadioButton("blah", !Model.blah) %> Yes <%= Html.RadioButton("blah", Model.blah) %> No </dd>


Aquí hay un ejemplo más completo usando un fieldset por razones de accesibilidad y especificando el primer botón como el predeterminado. Sin un conjunto de fieldset , para qué fieldset los botones de fieldset no puede determinarse programáticamente.

Modelo

public class MyModel { public bool IsMarried { get; set; } }

Ver

<fieldset> <legend>Married</legend> @Html.RadioButtonFor(e => e.IsMarried, true, new { id = "married-true" }) @Html.Label("married-true", "Yes") @Html.RadioButtonFor(e => e.IsMarried, false, new { id = "married-false" }) @Html.Label("married-false", "No") </fieldset>

Puede agregar un argumento @checked al objeto anónimo para establecer el botón de @checked como predeterminado:

new { id = "married-true", @checked = ''checked'' }

Tenga en cuenta que puede enlazar a una cadena reemplazando true y false con los valores de cadena.


El segundo parámetro está seleccionado, entonces usa el! para seleccionar el valor sin cuando el valor booleano es falso.

<%= Html.RadioButton("blah", !Model.blah) %> Yes <%= Html.RadioButton("blah", Model.blah) %> No


Partiendo ligeramente de la respuesta de Ben, agregué atributos para la identificación para poder usar etiquetas.

<%: Html.Label("isBlahYes", "Yes")%><%= Html.RadioButtonFor(model => model.blah, true, new { @id = "isBlahYes" })%> <%: Html.Label("isBlahNo", "No")%><%= Html.RadioButtonFor(model => model.blah, false, new { @id = "isBlahNo" })%>

Espero que esto ayude.


Si está utilizando MVC 3 y Razor también puede usar lo siguiente:

@Html.RadioButtonFor(model => model.blah, true) Yes @Html.RadioButtonFor(model => model.blah, false) No


Si puedo lanzar mi sombrero al cuadrilátero, creo que hay una manera más limpia que las respuestas existentes para reutilizar la funcionalidad del botón de radio.

Supongamos que tiene la siguiente propiedad en su ViewModel :

Public Class ViewModel <Display(Name:="Do you like Cats?")> Public Property LikesCats As Boolean End Class

Puede exponer esa propiedad a través de una plantilla de editor reutilizable:

Primero, crea el archivo Views/Shared/EditorTemplates/YesNoRadio.vbhtml

A continuación, agregue el siguiente código a YesNoRadio.vbhtml :

@ModelType Boolean? <fieldset> <legend> @Html.LabelFor(Function(model) model) </legend> <label> @Html.RadioButtonFor(Function(model) model, True) Yes </label> <label> @Html.RadioButtonFor(Function(model) model, False) No </label> </fieldset>

Puede llamar al editor de la propiedad especificando manualmente el nombre de la plantilla en su Vista :

@Html.EditorFor(Function(model) model.LikesCats, "YesNoRadio")

Pros:

  • Llegue a escribir HTML en un editor de HTML en lugar de anexar cadenas en el código subyacente.
  • Conserva la anotación de datos de DisplayName
  • Permite hacer clic en la etiqueta para alternar el botón de opción
  • Código mínimo posible para mantener en forma (1 línea). Si algo anda mal con la forma en que se desgarra, tómalo con la plantilla.

Terminé empaquetando esto en un método de extensión, así que (1) pude generar la etiqueta y la radio de una vez y (2) así no tuve que preocuparme por especificar mis propios ID:

public static class HtmlHelperExtensions { public static MvcHtmlString RadioButtonAndLabelFor<TModel, TProperty>(this HtmlHelper<TModel> self, Expression<Func<TModel, TProperty>> expression, bool value, string labelText) { // Retrieve the qualified model identifier string name = ExpressionHelper.GetExpressionText(expression); string fullName = self.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(name); // Generate the base ID TagBuilder tagBuilder = new TagBuilder("input"); tagBuilder.GenerateId(fullName); string idAttr = tagBuilder.Attributes["id"]; // Create an ID specific to the boolean direction idAttr = String.Format("{0}_{1}", idAttr, value); // Create the individual HTML elements, using the generated ID MvcHtmlString radioButton = self.RadioButtonFor(expression, value, new { id = idAttr }); MvcHtmlString label = self.Label(idAttr, labelText); return new MvcHtmlString(radioButton.ToHtmlString() + label.ToHtmlString()); } }

Uso:

@Html.RadioButtonAndLabelFor(m => m.IsMarried, true, "Yes, I am married")


o MVC 2.0:

<%= Html.RadioButtonFor(model => model.blah, true) %> Yes <%= Html.RadioButtonFor(model => model.blah, false) %> No