有没有人知道传递变量的方法,以便所有视图都可以访问该变量?
我希望我的应用允许用户从下拉列表中选择一年,然后由不同的视图用作全局变量。这是为了保存与该特定年份相关的记录。
我尝试过使用会话变量
控制器:
for (int i = 0; i < vm.years.Count; i++)
{
Session.Add(vm.years[i].StartDate.Year + "/" + vm.years[i].EndDate.Year, vm.years[i].Id);
}
_Layout.cshtml:
<select class="float-right">
@foreach (var a in Session)
{
<option value="@a">@a</option>
}
</select>
但是,这似乎不是最好的方法,就像刷新页面而丢失会话变量一样,如果更改页面,则值会更改回下拉列表中的第一个值。
使用模型的局部视图并在_layout页面中渲染局部视图会更好吗?
答案 0 :(得分:0)
考虑到ADyson的建议,我得到的解决方案如下:
控制器:将年份存储在字符串列表中,然后将其存储在单个会话变量年份中。
List<string> years = new List<string>();
for (int i = 0; i < vm.taxYears.Count; i++)
{
years.Add(vm.taxYears[i].StartDate.Year + "/" + vm.taxYears[i].EndDate.Year);
}
Session["years"] = years;
查看:将会话变量中的变量年份作为字符串列表分配,并循环遍历它们以获取所有年份作为选项。
@{
var years = Session["years"] as List<string>;
}
<select id="yearSelect" class="float-right custom-select" onchange="storeYear(this.value)">
@foreach (var a in years)
{
<option value="@a">@a</option>
}
</select>
Javascript:将值存储在localStorage中,这样当您更改为其他页面时,所选值保持不变。
function storeYear(yearVal) {
var currentVal = document.getElementById("yearSelect").value;
localStorage.setItem('selectVal', currentVal);
location.reload();
}
$(document).ready(function () {
if (localStorage.selectVal) {
//Select the value stored
$("#yearSelect").val(localStorage.selectVal);
}
});