将所选项目数据从多级下拉列表传递到控制器
Passing selected item data to controller from Multilevel dropdown
我创建了一个动态的多级下拉菜单。 当我单击第三级项目(来自数据库的新的、进行中的、已解决的)时,它应该被选中,并且只有当我单击创建按钮时,选定的项目数据才应该传递给控制器.
多级下拉代码
<div class="dropdown drop">
<button class="btn dropdown-toggle"
type="button"
id="dropdownMenuButton"
data-mdb-toggle="dropdown"
aria-expanded="false">
STATUS
</button>
<ul class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<li>
<a class="dropdown-item" href="#">
ProjectStatus »
</a>
<ul class="dropdown-menu dropdown-submenu">
@foreach (var i in ViewBag.ProjectStatus)
{
<li>
@*<a id="ProjectStatus" class="dropdown-item" href="#">@i.Text</a>*@
<select asp-for="ProjectStatus" class="form-control" value="@i.Text">@i.Text</select>
</li>
}
</ul>
</li>
<li>
<a class="dropdown-item" href="#">
DevelopmentStatus »
</a>
<ul class="dropdown-menu dropdown-submenu">
@foreach (var i in ViewBag.DevelopmentStatus)
{
<li>
<a class="dropdown-item" href="#">@i.Text</a>
</li>
}
</ul>
</li>
</ul>
</div>
HttpGet 创建方法
public IActionResult Create()
{
ViewBag.ProjectStatus = new SelectList(_context.ProjectStatus, "ProjectStatusID", "Status");
ViewBag.DevelopmentStatus = new SelectList(_context.DevelopmentStatus, "DevelopmentStatusID", "Status");
return View();
}
需要获取选中的列表项数据给post方法
[HttpPost]
public async Task<IActionResult> Create(Projects ec) {}
你可以尝试将selected item value 设置为隐藏输入,然后改变<li></li>
的背景。这里有一个演示:
<div class="dropdown drop">
<button class="btn dropdown-toggle"
type="button"
id="dropdownMenuButton"
data-mdb-toggle="dropdown"
aria-expanded="false">
STATUS
</button>
<ul class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<li>
<a class="dropdown-item" href="#">
ProjectStatus »
</a>
<ul class="dropdown-menu dropdown-submenu">
@foreach (var i in ViewBag.ProjectStatus)
{
<li>
<a class="dropdown-item" href='#' onclick='return change("@i.Text",this,"ProjectStatus")'>@i.Text</a>
</li>
}
</ul>
</li>
<li>
<a class="dropdown-item" href="#">
DevelopmentStatus »
</a>
<ul class="dropdown-menu dropdown-submenu">
@foreach (var i in ViewBag.DevelopmentStatus)
{
<li>
<a class="dropdown-item" href='#' onclick='return change("@i.Text",this,"DevelopmentStatus")'>@i.Text</a>
</li>
}
</ul>
</li>
</ul>
</div>
<input id="ProjectStatus" name="ProjectStatus" hidden />
<input id="DevelopmentStatus" name="DevelopmentStatus" hidden />
<script>
function change(text, t, type) {
$("li").css("background", "transparent");
if (type == "ProjectStatus") {
$("#ProjectStatus").val(text);
$("#DevelopmentStatus").val("");
} else {
$("#DevelopmentStatus").val(text);
$("#ProjectStatus").val("");
}
$(t).parent().css("background", "#1266f1");
return false;
}
</script>
当 select ProjectStatus 时,selected 的值将被放入 $("#ProjectStatus")
,而 $("#DevelopmentStatus")
的值将是 ""
。当 select DevelopmentStatus,selected 的值将被放入 $("#DevelopmentStatus")
,而 $("#ProjectStatus")
的值将是 ""
。
结果:
我创建了一个动态的多级下拉菜单。 当我单击第三级项目(来自数据库的新的、进行中的、已解决的)时,它应该被选中,并且只有当我单击创建按钮时,选定的项目数据才应该传递给控制器.
多级下拉代码
<div class="dropdown drop">
<button class="btn dropdown-toggle"
type="button"
id="dropdownMenuButton"
data-mdb-toggle="dropdown"
aria-expanded="false">
STATUS
</button>
<ul class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<li>
<a class="dropdown-item" href="#">
ProjectStatus »
</a>
<ul class="dropdown-menu dropdown-submenu">
@foreach (var i in ViewBag.ProjectStatus)
{
<li>
@*<a id="ProjectStatus" class="dropdown-item" href="#">@i.Text</a>*@
<select asp-for="ProjectStatus" class="form-control" value="@i.Text">@i.Text</select>
</li>
}
</ul>
</li>
<li>
<a class="dropdown-item" href="#">
DevelopmentStatus »
</a>
<ul class="dropdown-menu dropdown-submenu">
@foreach (var i in ViewBag.DevelopmentStatus)
{
<li>
<a class="dropdown-item" href="#">@i.Text</a>
</li>
}
</ul>
</li>
</ul>
</div>
HttpGet 创建方法
public IActionResult Create()
{
ViewBag.ProjectStatus = new SelectList(_context.ProjectStatus, "ProjectStatusID", "Status");
ViewBag.DevelopmentStatus = new SelectList(_context.DevelopmentStatus, "DevelopmentStatusID", "Status");
return View();
}
需要获取选中的列表项数据给post方法
[HttpPost]
public async Task<IActionResult> Create(Projects ec) {}
你可以尝试将selected item value 设置为隐藏输入,然后改变<li></li>
的背景。这里有一个演示:
<div class="dropdown drop">
<button class="btn dropdown-toggle"
type="button"
id="dropdownMenuButton"
data-mdb-toggle="dropdown"
aria-expanded="false">
STATUS
</button>
<ul class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<li>
<a class="dropdown-item" href="#">
ProjectStatus »
</a>
<ul class="dropdown-menu dropdown-submenu">
@foreach (var i in ViewBag.ProjectStatus)
{
<li>
<a class="dropdown-item" href='#' onclick='return change("@i.Text",this,"ProjectStatus")'>@i.Text</a>
</li>
}
</ul>
</li>
<li>
<a class="dropdown-item" href="#">
DevelopmentStatus »
</a>
<ul class="dropdown-menu dropdown-submenu">
@foreach (var i in ViewBag.DevelopmentStatus)
{
<li>
<a class="dropdown-item" href='#' onclick='return change("@i.Text",this,"DevelopmentStatus")'>@i.Text</a>
</li>
}
</ul>
</li>
</ul>
</div>
<input id="ProjectStatus" name="ProjectStatus" hidden />
<input id="DevelopmentStatus" name="DevelopmentStatus" hidden />
<script>
function change(text, t, type) {
$("li").css("background", "transparent");
if (type == "ProjectStatus") {
$("#ProjectStatus").val(text);
$("#DevelopmentStatus").val("");
} else {
$("#DevelopmentStatus").val(text);
$("#ProjectStatus").val("");
}
$(t).parent().css("background", "#1266f1");
return false;
}
</script>
当 select ProjectStatus 时,selected 的值将被放入 $("#ProjectStatus")
,而 $("#DevelopmentStatus")
的值将是 ""
。当 select DevelopmentStatus,selected 的值将被放入 $("#DevelopmentStatus")
,而 $("#ProjectStatus")
的值将是 ""
。
结果: