radiobutton net mvc example cshtml asp asp.net-mvc ui-helper

asp.net-mvc - example - radio button.net mvc



estado del botón de radio asp.net mvc (7)

El formulario no debe publicarse en la cadena de consulta, a menos que haya olvidado especificar el formulario como method = "POST". ¿Cómo estás especificando el formulario? ¿Estás utilizando ASP.NET MVC Beta?

Estoy probando asp.net mvc para un nuevo proyecto, y encontré algo extraño. Cuando uso los helpers MVI UI para cuadros de texto, los valores se mantienen entre llamadas. Pero, cuando uso una serie de botones de opción, el estado verificado no se conserva.

Aquí hay un ejemplo de mi vista.

<li> <%=Html.RadioButton("providerType","1")%><label>Hospital</label> <%=Html.RadioButton("providerType","2")%><label>Facility</label> <%=Html.RadioButton("providerType","3")%><label>Physician</label> </li>

Cuando el formulario se publica, construyo un objeto con "ProviderType" como una de sus propiedades. El valor en el objeto se establece, y luego redirijo a Action con el proveedor como argumento. Todo está bien, y termino en una URL como " http: // localhost / Provider / List? ProviderType = 1 " mostrando ProviderType. El valor se conserva en la URL, pero el asistente de UI no recupera el estado verificado.

Tengo este problema con listbox, dropdownlist y radiobutton. Los cuadros de texto recogen los valores muy bien. ¿Ves algo que estoy haciendo mal? Asumo que los ayudantes harán esto por mí, pero tal vez tendré que encargarme de esto solo. Solo estoy sintiendo mi camino a través de esto, por lo que tu opinión es apreciada.

Editar: Acabo de encontrar la anulación para el constructor SelectList que toma un valor seleccionado. Eso se encargó de mi problema de lista desplegable que mencioné anteriormente.

Editar # 2: Encontré algo que funciona, pero me duele hacerlo de esta manera. Siento que esto debería inferirse.

<li> <%=Html.RadioButton("ProviderType","1",Request["ProviderType"]=="1")%><label>Hospital</label> <%=Html.RadioButton("ProviderType", "2", Request["ProviderType"] == "2")%><label>Facility</label> <%=Html.RadioButton("ProviderType", "3", Request["ProviderType"] == "3")%><label>Physician</label> </li>

Con suerte, alguien buscará otra forma.


Bien lógicamente no persistiría, no hay estado de sesión. Piénselo como una página completamente nueva. Para que sus botones de radio se completen, debe persistir algo como ViewData ["ProviderType"] = 3 para que el radiobutton reponga sus datos.


Lo que necesita es algo como esto en su opinión:

<% foreach(var provider in (IEnumerable<Provider>)ViewData["Providers"]) { %> <%=Html.RadioButton("ProviderType", provider.ID.ToString(), provider.IsSelected)%><label><%=provider.Name%></label> <% } %>

Y luego en tu controlador tienes esto:

var providers = GetProviders(); int selectedId = (int) Request["ProviderType"]; // TODO: Use Int32.TryParse() instead foreach(var p in providers) { if (p.ID == selectedId) { p.IsSelected = true; break; } } ViewData["Providers"] = providers; return View();

La clase de Proveedor será algo como esto:

public class Provider { public int ID { get; set; } public string Name { get; set; } public bool IsSelected { get; set; } }


Si le da a los botones de opción el mismo nombre que la propiedad en su modelo, entonces MVC automáticamente configurará el atributo comprobado en el botón apropiado.

Creo que esto se basa en tener un modelo fuertemente tipado.


Estoy usando vs2010 ahora, funciona como:

<%=Html.RadioButton("ProviderType","1",Model.ProviderType==1)%><label>Hospital</label>

¿Se ve mejor?


He creado esta extensión de HTML Helper:

<Extension()> _ Public Function RadioButtonList(ByVal helper As HtmlHelper, ByVal name As String, ByVal Items As IEnumerable(Of String)) As String Dim selectList = New SelectList(Items) Return helper.RadioButtonList(name, selectList) End Function <Extension()> _ Public Function RadioButtonList(ByVal helper As HtmlHelper, ByVal Name As String, ByVal Items As IEnumerable(Of SelectListItem)) As String Dim sb As New StringBuilder sb.Append("<table class=""radiobuttonlist"">") For Each item In Items sb.AppendFormat("<tr><td><input id=""{0}_{1}"" name=""{0}"" type=""radio"" value=""{1}"" {2} /><label for=""{0}_{1}"" id=""{0}_{1}_Label"">{3}</label></td><tr>", Name, item.Value, If(item.Selected, "selected", ""), item.Text) Next sb.Append("</table>") Return sb.ToString() End Function

Luego en la vista:

<%= Html.RadioButtonList("ProviderType", Model.ProviderTypeSelectList) %>

En el controlador, la opción se mapea automágicamente usando el estándar:

UpdateModel(Provider)

Funciona de maravilla. Si es fotófobo, cambie el marcado generado.


Ver:

<%=Html.RadioButton("providerType","1")%><label>Hospital</label> <%=Html.RadioButton("providerType","2")%><label>Facility</label> <%=Html.RadioButton("providerType","3")%><label>Physician</label>

Controlador:

public ActionResult GetType(FormCollection collection) { string type=collection.Get("providerType"); if(type=="1") //code else if(type=="2") //code else //code return View(); }