Asp.net mvc 4 在asp.net mvc中单击浏览器后退按钮时保留dropdownlist的选定值
我有一个dropdownlist,用户在dropdownlist中选择一个选项,并根据该值填充一个仪表板。我的问题是,当用户单击浏览器中的“后退”按钮时,如何保留dropdownlist值以及仪表板值。我尝试了OutputCache,但OutputCache仅用于缓存呈现的HTML而不是数据,我尝试了内存缓存,但也不起作用 型号:Asp.net mvc 4 在asp.net mvc中单击浏览器后退按钮时保留dropdownlist的选定值,asp.net-mvc-4,caching,drop-down-menu,outputcache,memorycache,Asp.net Mvc 4,Caching,Drop Down Menu,Outputcache,Memorycache,我有一个dropdownlist,用户在dropdownlist中选择一个选项,并根据该值填充一个仪表板。我的问题是,当用户单击浏览器中的“后退”按钮时,如何保留dropdownlist值以及仪表板值。我尝试了OutputCache,但OutputCache仅用于缓存呈现的HTML而不是数据,我尝试了内存缓存,但也不起作用 型号: public class InternalViewModel { public int totalclients { get; set; }
public class InternalViewModel
{
public int totalclients { get; set; }
public int clientid { get; set; }
public DateTime? AsOFdate { get; set; }
}
控制器:
public ActionResult Dropdownlist()
{
InternalViewModel app = new InternalViewModel();
app.totalclients = db2.AppClients.Count();
IEnumerable<SelectListItem> clients = db2.AppClients.Select(c => new SelectListItem
{
Value = c.ClientID.ToString(),
Text = c.ClientName
});
ViewBag.clients = clients;
return PartialView(app);
}
因此,当用户单击浏览器上的“后退”按钮并返回此页面时。我希望用户能够看到选择的dropdownlist值以及仪表板值,基本上页面不应该刷新。我怎样才能做到这一点
谢谢你必须以某种方式坚持这个选择。几乎有两种选择:
localStorage
也有相当不错的支持,因此它不再像以前那样成为交易的破坏者
更新
要设置它,首先需要一个操作服务器端来响应AJAX请求。简单地说,这看起来像:
[HttpPost]
public ActionResult SetClientId(int clientId)
{
Session["ClientId"] = clientId;
return Json(new { success = true })
}
然后,您可以使用AJAX,客户端:
$('#clientid').on('change', function () {
$.post('/url/to/action/above/', { clientId: $(this).val() });
// omitted success function as there's nothing you really need to do,
// just fire and forget
});
当您处于允许编辑clientid
的操作中时,您只需尝试从会话设置它即可:
model.clientid = Session["ClientId"] as int? ?? default(int);
这看起来有点奇怪,但主要是因为有一个不可为null的int属性。首先,会话值存储为字符串,因此需要将该值强制转换为可为null的int(as int?
)。由于我们将用作
,如果该值无法转换为int,它将被设置为null
,因此我们必须转换为可为null的值。但是,您仍然无法为该属性存储可为null的int,因此如果值为null,则使用null coalesce运算符(??
)将值设置为默认值(int)
。您能给我举一个第一种方法的示例吗。因此,当我试图将其放入会话时,第一次显然clientid为null,这会抛出一个错误。我想我做错了,一个简短的代码片段将非常有用。谢谢多谢了,修好了
$('#clientid').on('change', function () {
$.post('/url/to/action/above/', { clientId: $(this).val() });
// omitted success function as there's nothing you really need to do,
// just fire and forget
});
model.clientid = Session["ClientId"] as int? ?? default(int);