【发布时间】:2020-05-22 16:42:23
【问题描述】:
我正在开发 MVC 应用程序。我在创建视图 (create.cshtml) 中的表单有问题。表单具有三个选择元素(下拉列表)。第一个由 ViewBag.RodzajePojazdow 填充,它在 Controller 的“Create”方法中加载。
public IActionResult Create()
{
ViewBag.RodzajePojazdow =
(
from rodzaj in _context.RodzajPojazdu
orderby rodzaj.IdRodzaju
select rodzaj
).ToList();
ViewBag.MarkiSamochodow =
(
from markaSam in _context.MarkaSamochodu
orderby markaSam.IdMarki
select markaSam
).ToList();
ViewBag.MarkiMotocykli =
(
from markaMot in _context.MarkaMotocykla
orderby markaMot.IdMarki
select markaMot
).ToList();
第二个选择元素(第二个下拉列表)中的选项应该根据第一个下拉列表中选择的选项来加载。 'ViewBag.MarkiSamochodow' 的内容应该加载到第二个选择元素(第二个下拉菜单)中,只有在第一个选择元素中(例如)选择了一个选项。如果在第一个选择元素中选择了 B 选项,则第二个选择元素(第二个下拉菜单)应由“ViewBag.MarkiMotocykli”的内容填充。
我在 CreateMethod 中使用 Json 来序列化我的 ViewBags
string jsonMot = JsonConvert.SerializeObject(ViewBag.MarkiMotocykli);
string jsonSam = JsonConvert.SerializeObject(ViewBag.MarkiSamochodow);
ViewBag.jsonMarkiMotocykli = jsonMot;
ViewBag.jsonMarkiSamochodow = jsonSam;
这是我的 HTML 表单的一部分:
<div class="form-group">
<label asp-for="IdRodzaju" class="control-label" for="wybierzRodzaj">Wybierz rodzaj pojazdu</label>
<select asp-for="IdRodzaju" class="form-control" id="wybierzRodzaj" onchange="uzupelnijMarki()">
@{
foreach (var item in ViewBag.RodzajePojazdow)
{
<option value="@item.IdRodzaju">@item.NazwaRodzaju</option>
}
}
</select>
@*<input asp-for="IdRodzaju" class="form-control" />*@
<span asp-validation-for="IdRodzaju" class="text-danger"></span>
</div>
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="MarkaPojazdu" class="control-label" for="wybierzMarke">Wybierz markę</label>
<select asp-for="MarkaPojazdu" class="form-control" id="wybierzMarke">
@*@{
--- If A option was choosen in previous select element do this:
foreach (var item in ViewBag.MarkiSamochodow)
{
<option value="@item.IdMarki">@item.NazwaMarki</option>
}
--- If B option was choosen in previous select element do this:
foreach (var item in ViewBag.MarkiMotocykli)
{
<option value="@item.IdMarki">@item.NazwaMarki</option>
}
}*@
</select>
然后在 JS 中我尝试将 ViewBag 内容加载到第二个下拉列表中,但是 JSON.parse() 方法在此处无法正常工作
<script>
function uzupelnijMarki() {
var markiSamochodow = [];
var markiMotocykli = [];
var jsonMotocykle = '@ViewBag.jsonMarkiMotocykli';
var jsonSamochody = '@ViewBag.jsonMarkiSamochodow';
var markiSamochodow = JSON.parse(jsonSamochody);
var markiMotocykli = JSON.parse(jsonMotocykle);
var rodzaj = document.getElementById("wybierzRodzaj");
//var markisel = document.getElementById("wybierzMarke");
var seltype = rodzaj.options[rodzaj.selectedIndex].value;
alert(' napis');
if (seltype == 1) {
$("#wybierzMarke").empty();
markiSamochodow.forEach(function (obj) {
$('#wybierzMarke').append($('<option></option>').val(obj.NazwaMarki).html(obj.IdMarki))
});
}
if (seltype == 2) {
$("#wybierzMarke").empty();
markiMotocykli.forEach(function (obj) {
$('#wybierzMarke').append($('<option></option>').val(obj.NazwaMarki).html(obj.IdMarki))
});
}
}
</script>
是否有任何更简单的方法可以根据先前选择的选项填充第二个下拉列表?
谢谢,
【问题讨论】:
-
通过c-sharpcorner.com/UploadFile/sourabh_mishra1/… 如果您的问题仍未解决,请告诉我。
-
感谢您的这篇文章,它对我帮助很大。但我不想只为创建两个 IList
创建一个额外的类。我有 Pojazd 课。我应该在那里添加这两个列表吗?该类有一些注释可以通过迁移创建表。恐怕在以后的任何迁移中都会将两个列表添加到我的 Pojazd 表中,不是吗?否则我的 Create.cshtml 视图类型是 Pojazd。我无法向 Pojazd 类添加额外的 IList,也无法为这两个列表创建额外的类,因为我无法在 .cshtml 中使用两种不同的模型类型。
标签: javascript c# .net json asp.net-core-mvc