2011-04-17 18 views
8

estoy jugando con el andamiaje que está en Asp.net MVCMVC 3 - Andamiaje lista desplegable

tengo una propiedad en mi modelo de vista de los países

public IEnumerable<SelectListItem> Countries { get; set; } 

Sin embargo, cuando se crea una ver y especificar el modelo de vista no andamia una lista desplegable como esperaba. De hecho, es completamente ignorado.

he compilado el proyecto antes de hacerlo

También probé la adición de una propiedad como esta

public int CountryId { get; set; } 

Como este artículo sugiere que hay una convención en el trabajo

http://blog.stevensanderson.com/2011/01/28/mvcscaffolding-one-to-many-relationships/

Estoy usando la opción Agregar vista que tiene cuando hace clic derecho en ac método de acción ontroller

¿Alguna idea de qué es lo que está mal?

Respuesta

5

En mi proyecto actual, me enfrenté a este problema y no pude encontrar una manera rápida de andamiar la lista desplegable de una relación uno-muchos dentro de una de mis Entidades.

Lo que terminé haciendo fue similar a la siguiente:

1- Crear el AddView normales => Crea manera.

2- Si tuviera una propiedad ID en mi clase de modelo, el defaul; t plantilla generará algo como esto para representar esta propiedad en mi opinión:

<div class="editor-label"> 
       @Html.LabelFor(model => model.CityID) 
      </div> 
      <div class="editor-field"> 
       @Html.EditorFor(model => model.CityID) 
       @Html.ValidationMessageFor(model => model.CityID) 
</div> 

3- Ahora tengo que sustituir este plantilla por defecto con uno que funciona, así que escribí este código en el CREATE método:

IEnumerable<SelectListItem> cityItems = dataContext.Cities.AsEnumerable().Select(c => new SelectListItem() 
      { 
       Text = c.Name, 
       Value = c.ID.ToString(), 
       Selected = false, 
      }); 
      SelectList cityList = new SelectList(cityItems, "Value", "Text"); 
      ViewBag.CityList = cityList; 

que esto obtendrá la mesa de las ciudades y crear un selectlist que me puede pasar a mi modo de ver y trabajar con él para proporcionar la DrobDown con son artículos.

4- reemplace el código predeterminado en mi opinión, a una como la siguiente:

<div class="Post-label"> 
         <div class="editor-label"> 
          @Html.LabelFor(model => model.CityID) 
         </div> 
         <div class="editor-field"> 
          @Html.DropDownListFor(m => m.CityID, ViewData["CityList"] as SelectList) 
          @Html.ValidationMessageFor(model => model.CityID) 
         </div> 
</div> 

La razón por la que he utilizado en lugar de ViewData["CityList"]ViewBag.CityList es que éste funcionó, pero el otro no.

5- Ahora mi vista funciona y busco los datos de City tal como esperaba, y utilizando el mismo modelo dentro de mi vista Edit también funcionó.

Pruébelo y avíseme qué sucedió, gracias.

+0

gracias por la respuesta. Sé cómo codificarlo a mano, solo estoy tratando de descubrir por qué el andamio automático no funciona para este escenario – ChrisCa

1

Con el fin de tener la opción de elegir un país con un desplegable con el establecimiento con su modelo debe ser:

public Country Country{ get; set; }propiedad de navegación utilizada por EF, no implica la base de datos

con

public Country CountryId{ get; set; } Crear la clave externa en la tabla Person

Cada instancia/registro de una persona está asociada a un país: la relación se define con la propiedad de navegación por código y con el CountryID para la base de datos. La plantilla scaffholding generará entonces la edición/creación de métodos y puntos de vista usando:

ViewBag.PossibleCountries 

Here's a similar scenario.

4

me he dado cuenta de que para un determinado modelo, el "crear" código generado andamio cuando se crea un nuevo controlador es diferente que si hace clic con el botón derecho en un controlador existente y dice "Agregar vista" y elige la plantilla "Crear" andamios. En el primer caso, teniendo en cuenta que tiene las propiedades correctas en la clase hija

public Country Country {get;set;} 
public int CountryID {get;set;} 

entonces este caso (controlador de adición con MVC andamios de lectura/escritura y la clase de modelo apropiado) generará un @ Html.DropDownList para la relación padre , mientras que al hacer clic con el botón derecho en el método Create del controlador no se andamiará el menú desplegable, sino que se creará un @ Html.EditorFor para la relación.

Así que la respuesta si desea que el código de andamios genere el menú desplegable puede ser eliminar y volver a crear su controlador si es posible, de lo contrario, agregue manualmente el código correspondiente.

Cuestiones relacionadas