Каскадный выпадающий список с MVC5, AJAX, C # и MSSQL Server
-
20-12-2019 - |
Вопрос
Я вполне новый для 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 .Вы можете найти аналогичный пример, основанный на ваших потребностях.