Просмотр с двумя раскрывающимися списками, второй по умолчанию отключен. Когда выбор сделан в первом раскрывающемся списке, предполагается, что оба контроллера должны вызвать действие для получения списка значений для второго раскрывающегося списка, а затем использовать простой сценарий для очистки второго раскрывающегося списка, включить второй раскрывающийся списоки заполните его результатами.
Когда я делаю выбор из первого раскрывающегося списка, включается второй раскрывающийся список, но значения не отображаются. Используя Ctrl-shift-i, я вижу ошибку TypeError: правая часть 'in' должна быть объектом, есть строка.
Но я использую Список значений, а не строковую переменную ...
Я проверил в диспетчере SQL, что запрос SQL работает для всех трех различных опций, доступных в первом раскрывающемся меню.
Добавлено предупреждение (attValues);в $ .post. Это приводит к тому, что в документе отображается весь HTML-документ, который говорит о том, что страница 404 не найдена.
Важная строка выглядит так: <form method="post" action="../../../Error_404.aspx?selectedOption=SKU_SelectableAttribute_2" id="error404">
Контроллер
[HttpPost]
public ActionResult GetAttributeValues(string selectedOption)
{
JsonResult result = new JsonResult();
if (selectedOption != null)
{
string sql = "SELECT Title FROM BL_Attribute (NOLOCK) WHERE BL_Attribute.DeleteFlag = '0' AND AttributeGroupName = '" + selectedOption + "'";
using (SqlCommand selectAttValues = new SqlCommand(sql, P21SqlConnection))
{
using (SqlDataReader reader = selectAttValues.ExecuteReader())
{
List<string> attValues = new List<string>();
while (reader.Read())
{
attValues.Add(reader["Title"].ToString());
}
return Json(attValues, JsonRequestBehavior.AllowGet);
}
}
}
return Json(new { Success = "false" });
}
Просмотр
@using System.Data
@model Product
@{
ViewBag.Title = "Attributes";
Layout = "~/Views/Shared/_VisualRuleLayout.cshtml";
var listAttGroups = new List<SelectListItem>
{
new SelectListItem { Text = "SKU_Color", Value = "SKU_Color"},
new SelectListItem { Text = "SKU Select Att 1", Value = "SKU_SelectableAttribute_1"},
new SelectListItem { Text = "SKU Select Att 2", Value = "SKU_SelectableAttribute_2"}
};
}
@section scripts{
<script>
$(function () {
$("#ApplyGroup").change(function () {
var option = $(this).val();
$("#AttributeValue").empty();
$("#AttributeValue").prop('disabled', false);
var url = "KCDA_PrdGrp_Attributes/GetAttributeValues?selectedOption=" + option;
$.post(url, function (attValues) {
$.each(attValues, function (i, attValue) {
$("#AttributeValue").append($('<option></option>').val(attValue).html(attValue));
});
});
});
});
</script>
}
<center><h3>Edit Attributes</h3></center>
@using (Html.BeginForm("Return", "KCDA_PrdGrp_Attributes", FormMethod.Post, new { name = "Return" }))
{
@Html.DropDownList("ApplyGroup", listAttGroups, new { @id = "ApplyGroup", @class = "form-control" })
@Html.DropDownList("AttributeValue", new List<SelectListItem>(), new { @id = "AttributeValue", @class = "form-control", disabled = "disabled" })
}