Todos los noobs MVC inicialmente evitar la palabra 'M', pero sí un poco comienzan a principios del acrónimo MVC. Así que tal vez, solo tal vez, es posible que desee comenzar su solución con un Modelo ... solo diciendo.
Do not Repeat Yourself (DRY). Vas a terminar copiando y pegando el "nuevo PageData()" a cada Controlador que pasa la lista de opciones a una Vista. Luego, querrá eliminar o agregar una opción y deberá editar los datos de página de cada controlador.
Además, desea escribir la menor cantidad de código con el menor número innecesario de "agregar" s, "nuevo" s, "IS" y "Nombre" s. Como solo tiene un par de clave-valor en la opción de selección (y/o una lista de botones de opción), utilice la estructura de datos más ligera posible, es decir, un diccionario en su modelo.
Luego, simplemente haga referencia al Modelo en el Controlador y convierta el Diccionario a una Lista de Selección en la Vista usando una ListaDown Drop para que contenga una expresión LINQ Lambda.
¿Intimidado? No estas solo. Yo ciertamente lo era. Aquí está un ejemplo Solía enseñar a mí mismo la M, la V, y la C: parte
El Modelo de MVC:
using System.Web.Security;
using System.Collections.Generic;
using System.Text;
using System.Linq.Expressions;
using System.Web.Routing;
using System.Web.Helpers;
using System.Web.Mvc.Html;
using MvcHtmlHelpers;
using System.Linq;
// EzPL8.com is the company I work for, hence the namespace root.
// EzPL8 increases the brainwidths of waiters and bartenders by augmenting their "memories" with the identifies of customers by name and their food and drink preferences.
// This is pedagogical example of generating a select option display for a customer's egg preference.
namespace EzPL8.Models
{
public class MyEggs
{
public Dictionary<int, string> Egg { get; set; }
public MyEggs() //constructor
{
Egg = new Dictionary<int, string>()
{
{ 0, "No Preference"}, //show the complete egg menu to customers
{ 1, "I hate eggs"}, //Either offer an alternative to eggs or don't show eggs on a customer's personalized dynamically generated menu
//confirm with the customer if they want their eggs cooked their usual preferred way, i.e.
{ 2, "Over Easy"},
{ 3, "Sunny Side Up"},
{ 4, "Scrambled"},
{ 5, "Hard Boiled"},
{ 6, "Eggs Benedict"}
};
}
}
El controlador es ahora bastante simple, simplemente pasando el modelo. Evita crear un concepto aislado, que probablemente no esté aislado en una sola página.:
public ActionResult Index()
{
var model = new EzPL8.Models.MyEggs();
return View(model);
}
El View utiliza DropDownListFor (en lugar de DropDownList) y se requiere una expresión Lambda de tipado fuerte en la refactorización evento:
@Html.DropDownListFor(m => m.Egg, new SelectList(Model.Egg, "Key", "Value"))
Voilà, el código HTML resultante:
<select id="Egg" name="Egg">
<option value="0">No Preference</option>
<option value="1">I hate eggs</option>
<option value="2">Over Easy</option>
<option value="3">Sunny Side Up</option>
<option value="4">Scrambled</option>
<option value="5">Hard Boiled</option>
<option value="6">Eggs Benedict</option>
</select>
Nota: no se confunda con el VALOR en <option value="6">
, que es la clave del diccionario, del "valor" en la lista de selección(), que es el texto/título (por ejemplo, huevos Benedicto) t sombrero termina entre las etiquetas de opción.
caso de uso: Para minimizar el tráfico entre la aplicación y la base de datos que he creado una lista estática para evitar una consulta de base de datos de la lista desplegable que rara vez o nunca cambia hacia abajo. Sin embargo, el cambio es inevitable y dentro de seis meses fallece un restaurante en el restaurante de mi cliente; no por el jamón verde, sino porque eran alérgicos a los huevos y el cocinero mezcló algunos con sus gofres.
El restaurante necesita la información de su cliente actualizada para incluir las alergias a los alimentos de inmediato. Si bien aman a los clientes habituales, no les gusta que los clientes muertos vuelvan como zombis que no tienen forma de pagar porque se cancelaron sus tarjetas de crédito.
Retórica Pregunta: ¿Debo modificar todos los controladores y las vistas relacionadas con las preferencias de huevo de los clientes? O simplemente inserte {7, "Alérgico a los huevos"} en el modelo?
Otra pregunta retórica: ¿No son huevos de tortillas? ¿Desea agregar {8, "Omelette, Western"}, {9, "Omelette, Mushroom-Feta-Spinach"} una vez al modelo y hacer que las nuevas adiciones se propaguen automágicamente a través de todas las listas desplegables en todas las vistas que las usan? ?
El fondo (s) Esta es probablemente mucho más de lo que solicitó, ... pero lo hizo decir MVC, no sólo VC:
1. Uso de un Modelo en * M * VC. 2. Utilice un diccionario en el Modelo cuando una lista de selección se base en nada más que una "clave principal" y un título. 3. Si su lista estática no coincide con una tabla de búsqueda de base de datos en alguna parte, su aplicación probablemente no sea muy útil. Cuando agrega una opción a una lista estática, lo más probable es que también necesite realizar una inserción en la tabla de búsqueda para evitar un error de integridad de clave principal/clave externa con otras tablas en la base de datos. 4. Utilice estructuras de datos lambda y fuertemente tipadas para evitar errores y obtener soporte de escritura anticipada.
He seleccionado mi respuesta, ya que es la que fui con. – GONeale
Esto funciona bien, pero si quiero que el menú desplegable cargue Decimal como valor de inicio, ¿qué debo hacer? – Sakthivel