我想要一個選擇串列,它將列出表查詢中的專案供用戶選擇。這是用
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 之后加載。
如果我以錯誤的方式解決這個問題,我將不勝感激推動首選流程。
uj5u.com熱心網友回復:
我建議您使用 cookie 來跨頁面攜帶值,而不是使用路由引數。
我分兩步實作:
首先,添加一個Onchange事件到<select>,當您選擇一個選項時,該Onchange事件將設定一個cookie來保存您選擇的值。
其次,當您加載其他頁面時,<select>會讀取 cookie 以顯示您之前的選擇。
這是我的代碼:
DropDown List在_layout .cshtml 中
<li>
<select id="fruit" onchange="save(this.value)">
<option value=0>apple</option>
<option value=1>pear</option>
<option value=2>watermelon</option>
<option value=3>cherry</option>
</select>
</li>
JavaScript在_layout .cshtml 中
<script>
//....................set Cookie............
var saveclass = null;
function save(cookieValue)
{
var sel = document.getElementById('fruit');
saveclass = saveclass ? saveclass : document.body.className;
document.body.className = saveclass ' ' sel.value;
setCookie('theme', cookieValue, 365);
}
function setCookie(cookieName, cookieValue, nDays)
{
var today = new Date();
var expire = new Date();
if (nDays==null || nDays==0)
nDays=1;
expire.setTime(today.getTime() 3600000*24*nDays);
document.cookie = cookieName "=" escape(cookieValue) ";expires=" expire.toGMTString() ";path=/";
}
//......................read Cookie.............
document.addEventListener('DOMContentLoaded', function()
{
var themeSelect = document.getElementById('fruit');
var selectedTheme = readCookie('theme');
themeSelect.value = selectedTheme;
saveclass = saveclass ? saveclass : document.body.className;
document.body.className = saveclass ' ' selectedTheme;
});
function readCookie(name)
{
var nameEQ = name "=";
var ca = document.cookie.split(';');
for(var i = 0; i < ca.length; i )
{
var c = ca[i];
while (c.charAt(0) == ' ') c = c.substring(1, c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
}
return null;
}
</script>
然后您可以在其他頁面上獲取相同的選項

你是對的 。當我從 setCookie 函式中洗掉 days 組件時,cookie 只會在會話存在時才存在。

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/371327.html
上一篇:用戶注銷后如何使AspNetCore.Identity.ApplicationCookie無效
下一篇:ASP.NETCore-無法在屬性“MerchantStatus”上設定“System.Int32”型別的默認值“1”
