2008-11-05 15 views
7

Necesito una lista desplegable en mi página que permita al usuario seleccionar su estado. Dado que este es probablemente un control que se utilizará en otro lugar, pensé que sería una buena idea crear un MVC View User Control que pudiera reutilizarse.ASP.NET MVC View User Control: cómo establecer IDs?

que estaba pensando el control sería algo como esto:

<select name="" id=""> 
    <option value="AL">Alabama</option> 
    <option value="AK">Alaska</option> 
</select> 

Y el código en mi opinión, sería algo así como:

<%= Html.RenderPartial("StateDropdownControl") %> 

Mi pregunta es, ¿cuál es la mejor manera de configurar el nombre y la identificación en el control? Me gustaría asegurarme de tener varias instancias de este control en una página, si es necesario. Además, me gustaría poder enviar el estado que debería seleccionarse por defecto.

¿Lo haría con ViewData de alguna manera?

Respuesta

9

Corey está en la solución correcta. Creo que declarar objetos específicos del modelo para su vista hace que las vistas sean MUY sencillas y, como una bonificación lateral, son muy fáciles de probar.

Así que en vez de pasar el ID como el objeto, lo que probablemente desea crear su propio objeto Modelo de pasar en

Podría ser algo como esto:.

public class StateDropDownPresentationModel 
{ 
    public string DropDownID { get; set; } 
    public string SelectedState { get; set; } 
} 

Obviamente, sigue agregando lo que necesites a este modelo para hacer que tu vista sea correcta.

A continuación, se le puede llamar así:

<%= Html.RenderPartial("/someDirectory/SomeControl.ascx", new StateDropDownPresentationModel { DropDownID = "MyID", SelectedState = "IL" } %> 

A continuación, sólo asegúrese de poner en cheques por cosas como ID siendo nulo/blanco (que probablemente debería producir un error) y SelectedState siendo nulo/blanco .

3

bien que puede pasar datos de objeto con el método renderPartial en conjunción con el control de usuario para hacer, por lo que fácilmente se podría hacer lo siguiente:

<%= Html.RenderPartial("/someDirectory/SomeControl.ascx", "MyID") %> 

y en el control de usuario, haga lo siguiente :

<select name="<%=ViewData.Model%>" id="<%=ViewData.Model%>"> 

.... 

sólo para estar seguro, una mejor manera de manejar la situación es hacer una sencilla DTO (objeto de transferencia de datos) para sostener que la infor para que pueda pasar más información a su control de usuario, que inevitablemente necesitará.

Ejemplo:


class ComboData 
{ 
    string ID {get;set;} 
    string CssClass {get;set;} 
    //Other stuff here 
} 

<% 
var comboData = new ComboData {ID = "myID", CssClass = "comboStyle" } 

%> 

<%= Html.RenderPartial("/someDirectory/SomeControl.ascx", comboData) %> 
<select name="<%=ViewData.Model.ID%>" id="<%=ViewData.Model.ID%>" class="<%=ViewData.Model.CssClass%>"> 

.... 

asegúrese de que establece el código subyacente para el control de usuario a ser un tipo genérico de ComboData para este ejemplo.

1

Eche un vistazo al método de ayuda Html.DropDownList. Tiene una serie de sobrecargas que le permiten pasar los datos de la lista y establecer el elemento seleccionado. la versión más simple simplemente establece el nombre de la selección.

<%= Html.DropDownList("SelectStates"); %> 

Si hay un valor en el ViewData [ "SelectStates"] que es de tipo MultiSelectList continuación, la lista se rellena automáticamente.

Cuestiones relacionadas