Вопрос

Я вполне новый для MVC, исходя из форм Windows и 3 уровня архитектуры.

Я пытаюсь понять, используя каскадные выпадающие списки (DDL), заполненные из базы данных. Я использую MS SQL Server 2012, VS 2013

В настоящее время я работаю на анкете пользователя, пользователи могут выбрать из нескольких ответов с DDL. Зависит от некоторых выборов, мне нужно изменить ответы (опять DDL) на следующий вопрос.

База данных:

Таблица DDLStacks:

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

Таблица DDLStackContents (идентификатор контента стека SCID, цель индексации)

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...
.

Процедура:

   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
.

Как вы можете видеть вопросы DDLStacks, DDLStackContents удерживает возможные ответы на этот вопрос.

Если есть группа, мы можем выбрать только ответы из этой группы, в противном случае все ответы для определенного стека.

Теперь я создал модель данных ADO.NET Entity для доступа к SPDLLSELECT.

Теперь моя модель фруктов это

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; }
}
.

Мой контроллер Это, мне нужно выбрать цвет зависеть от типа ягоды. Скажите, если Avacado выберите все, если банана просто группа 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);
    }
}   
.

Вот мой взгляд:

@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>

}
.

Это мое основное кодирование, я пробовал различные методы, чтобы сделать эту работу, я хотел бы видеть правильный способ сделать это с Ajax Contly Tys Code.

может использовать частичные виды? Есть предположения?

Это было полезно?

Решение

Вы уже получили модель, с которой ваш взгляд сильно набирается.Все, что вам нужно сделать, это сделать, добавьте событие Изменить в раскрывающемся списке (для получения дополнительной информации см. Ссылка ниже).В случае изменения события вы можете загрузить значения в соответствии с выбранным значением E.G.Если выбран ягода, вам нужно будет получать соответствующие значения для винограда Berry I.e, Avocado.

Вы можете загружать значения, используя JavaScript, который полезен, когда у вас есть большой набор данных.Или вы можете предварительно загрузить вид со всеми данными и в этом случае, вам просто нужно фильтровать ответы на основе вопроса, выбранного на UI.

Для помощи о том, как добиться этого на практике, пожалуйста, обратитесь Каскадный выпадающий список в MVC 4 .Вы можете найти аналогичный пример, основанный на ваших потребностях.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top