Pregunta

Soy bastante nuevo en MVC viene de formularios windows forms y 3 de nivel de la arquitectura.

Estoy tratando de averiguar en cascada dropdownlists (DDL) poblada de la base de datos.Im usando MS SQL Server 2012 VS 2013

Actualmente estoy en el trabajo del usuario cuestionario el cual los usuarios pueden seleccionar entre varias respuestas de los DDL.Dependen de algunas selecciones necesito cambiar las respuestas (de nuevo DDL) en la siguiente pregunta.

Base de datos:

Tabla DDLStacks:

StackId | StackName
   1    | Berry
   2    | BerryColor
   3    ....

Tabla DDLStackContents (SCId Pila de identificación de contenido, la indexación propósito)

SCId | StackId | GroupId | Key | Value
--------------------------------------
1 | 1 | Null | 1 | Grape
2 | 1 | Null | 2 | Avocado
3 | 1 | Null | 3 | Banana
4 | 2 | Null | 1 | Yellow
5 | 2 | Null | 2 | Green
6 | 2 | 1 | 3 | Red
7 | 2 | 1 | 4 | Orange
8...

Procedimiento:

   CREATE PROCEDURE [dbo].[spDLLSelect]
        @p_StackName_in VARCHAR(20),
        @p_GroupId_in Int = null
    AS 
    BEGIN
        SELECT [Key],Value FROM DDLStackContents
        WHERE StackID IN (SELECT StackId FROM DDLStacks WHERE StackName = @p_StackName_in)
        AND (GroupId = @p_GroupId_in OR @p_GroupId_in IS null) 
        Order By [Key] 
    END

Como se puede ver DDLStacks a cabo las preguntas, DDLStackContents contiene posibles respuestas para esa pregunta.

Si hay un grupo que podemos seleccionar solo las respuestas de ese grupo, de lo contrario, todas las respuestas particulares de la pila.

Ahora, a continuación, he creado un ADO.NET Entidad modelo de Datos para el acceso spDLLSelect.

Ahora mi fruto modelo es este

public class FruitModel
{
    public IEnumerable<SelectListItem> BerryList { get; set; }
    public IEnumerable<SelectListItem> BerryColorList { get; set; }

    [Display(Name = "Berry")]
    public byte? Berry { get; set; }

    [Display(Name = "BerryColor")]
    public byte? BerryColor { get; set; }
}

Mi controlador es este, tengo que seleccionar el color dependen del tipo de berry.Dicen que si Avacado seleccionar todo, si Plátano sólo el grupo 1.

public class HomeController : Controller
{
    public ActionResult Index()
    {
        CherryEntities db = new CherryEntities();
        var model = new FruitModel();
        model.BerryList = new SelectList(db.spDLLSelect("Berry", null), "Key", "Value");
        //model.BerryColorList = new SelectList(db.spDLLSelect("BerryColor", null), "Key", "Value");
        //model.BerryColorList = new SelectList(db.spDLLSelect("BerryColor", 1), "Key", "Value");
        return View(model);
    }
}   

Aquí está mi punto de vista:

@using (Html.BeginForm("Register2", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{

<div class="form-group">
    @Html.LabelFor(m => m.Berry, new { @class = "col-md-2 control-label" })
    <div class="col-md-10" >
        @Html.DropDownListFor(m => m.Berry, Model.BerryList, "Please Select")
    </div>
</div>

<div class="form-group">
    @Html.LabelFor(m => m.BerryColor, new { @class = "col-md-2 control-label" })
    <div class="col-md-10">
        @Html.DropDownListFor(m => m.BerryColor, Model.BerryColorList, "Please Select")
    </div>
</div>

}

Este es mi básico de codificación, he intentado varios métodos para realizar este trabajo, me gustaría ver la forma correcta de hacerlo con ajax inflexible código.

Puede ser el uso de vistas parciales?los pensamientos?

¿Fue útil?

Solución

Ya tiene un Modelo que tu vista está fuertemente tipada con.Todo lo que necesitas hacer es agregar un evento de cambio en la lista desplegable (para obtener más información, consulte refiere el enlace de abajo).En el evento de cambio, puede cargar los valores por valor seleccionado por ej.si Berry es seleccionado, usted necesita para obtener los valores correspondientes de la Baya del yo.e de Uva, Aguacate.

Puede cargar los valores por medio de JavaScript, lo cual es útil cuando se tiene un gran conjunto de datos.O usted puede cargar la vista con todos los datos y, en ese caso, sólo es necesario filtrar las respuestas basadas en la pregunta seleccionada en la interfaz de usuario.

Para obtener ayuda sobre cómo lograr esto en la práctica, por favor consulte Cascada DropDownList En MVC 4.Usted puede encontrar ejemplo similar basado en sus necesidades.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top