【发布时间】:2022-01-06 11:33:05
【问题描述】:
我想要一个选择列表,它将列出表查询中的项目供用户选择。 这是用
呈现的 Options = _context.BranchAssignment
.Where(a => a.ColleagueID == UserColleague)
.IgnoreQueryFilters()
.OrderBy(a => a.Branch.BranchNumber)
.Select(a =>
new SelectListItem
{
Value = a.BranchID.ToString(),
Text = a.Branch.BranchName
})
.ToList();
<form id="assignedBranch" method="post">
<div class="row">
<select asp-for="BranchSelect" asp-items="Model.Options" onchange="this.form.submit();"></select>
</div>
</form>
如您所见,这是一个非常简单的表格。我目前正在开发的解决方案应该是 onFormSubmit,采用选中的选项,将其设置为 cookie 值,然后如果用户导航到另一个页面,我可以为选择列表设置选中的选项。
我仍在调试这个问题,我想知道是否有更好的解决方案。理想情况下,我希望这个选择列表编写一次并显示在 _layout 导航栏中,但我相信您无法从视图组件中读取(我的最后一次尝试)来获取所选值以用作 OnGet 中的路由参数。
如果您想象用户转到页面 A 并选择列表选择的项目是选项 2,那么我想通过 onGet 加载 webaddress.com/PageA/option2,因为路由将设置为选项 2
如果他们随后转到页面 B,则选择列表将呈现并记住他们之前的 option2 选项,因此它将加载 webaddress.com/PageB/option2 以及他们是否可以更改为例如option3 和 OnFormSubmit webaddress.com/PageB/option3 之后将加载。
如果我以错误的方式处理此问题,我将感谢推动首选流程。
【问题讨论】:
-
不建议使用route传值,可能会造成一些路由冲突,使用cookie即可。
-
@XinranShen 我的问题可能不清楚,但我不打算在路由中传递任何值,cookie 是我传递值的可能选项,但路由将在 onGet 中设置基于 cookie 值的页面。
标签: c# asp.net-core razor-pages model-binding