提问人:Zafer Andaç Özer 提问时间:11/4/2023 最后编辑:marc_sZafer Andaç Özer 更新时间:11/5/2023 访问量:35
ASP.NET Core 6 MVC:回发后维护下拉列表所选值
ASP.NET Core 6 MVC : maintain dropdownlist selected value after postback
问:
我有一个下拉列表(也尝试过选择列表),它的项目来自 ViewBag。用户将选择一个项目,然后单击按钮以列出所选班级中的学生。
没关系,但是在回发下拉列表的选定值被重置后。
我希望列表中的选定元素保持不变。
(如果我在将代码中的功能名称翻译成英文时有任何不一致之处,请忽略。模型及其功能没有问题。所有插入、更新、删除操作都正常工作。我唯一的要求是下拉列表保留其选定的值。
视图
@model IEnumerable<Proje.Models.Student>
<form asp-action="Index" method="post" >
@Html.DropDownList("groups", ViewBag.ListOfGroups,"Select...",new {@class="form-control"})
<button type="submit" class="btn btn-sm btn-danger">
List
</button>
</form>
控制器
public class StudentsController : Controller
{
private readonly ApplicationDbContext _context;
public StudentsController(ApplicationDbContext context)
{
_context = context;
}
public async Task<IActionResult> Index()
{
ViewBag.ListOfGroups = new SelectList(_context.Groups.OrderBy(k => k.Seviye).ThenBy(k => k.ShortName), "GroupId", "ShortName");
var applicationDbContext = _context.Students.Where(k => k.Group.GroupId == 1).Include(s => s.Group).OrderBy(k => k.Group.Level).ThenBy(k => k.Group.ShortName).ThenBy(k => k.Number);
return View(await applicationDbContext.ToListAsync());
}
[HttpPost]
public async Task<IActionResult> Index(string groups)
{
int Id = Convert.ToInt32(groups);
ViewBag.ListOfGroups = new SelectList(_context.Groups.OrderBy(k => k.Level).ThenBy(k => k.ShortName), "GroupId", "ShortName");
var applicationDbContext = _context.Students.Where(k => k.Group.GroupId==Id).Include(s => s.Group).OrderBy(k => k.Group.Level).ThenBy(k => k.Group.ShortName).ThenBy(k => k.Number);
return View(await applicationDbContext.ToListAsync());
}
}
我在 StackOverflow 和互联网上搜索了太多,但找不到解决我的问题的方法,或者我不明白。
答:
0赞
BenderBoy
11/5/2023
#1
试试这个?
[HttpPost]
public async Task<IActionResult> Index(string groups)
{
int id = Convert.ToInt32(groups);
var students = await _context.Students
.Where(k => k.Group.GroupId == id)
.Include(s => s.Group)
.OrderBy(k => k.Group.Level)
.ThenBy(k => k.Group.ShortName)
.ThenBy(k => k.Number)
.ToListAsync();
selectedGroup = students.FirstOrDefault()?.Group;
var allGroups = _context.Groups
.OrderBy(k => k.Level)
.ThenBy(k => k.ShortName);
ViewBag.ListOfGroups = new SelectList(allGroups, "GroupId", "ShortName", selectedGroup);
return View(students);
}
唯一的区别是,我们将一个组传递给 。我正在使用学生来获取该组,因此仅当所选组中有任何学生时,这才有效。SelectList()
评论