可能会有点长,所以我将其作为答案而不是评论。这更多是一种逻辑,实际实现取决于您,但主要目标是分享想法。
在此之前,让我回忆一下你在这里做什么。
<script>
var audioElement = document.getElementById(audioId);
if (typeof (Storage) !== "undefined") {
localStorage.setItem("audiourl", audioElement);
document.getElementById("result").innerHTML = localStorage.getItem["audiourl"];
}
</script>
如果您在 localStorage 属性中分配 DOM 元素引用(也许您打算存储该值,但我不会详细说明),那么我看不出从 localStorage 取回它的意义几乎同时再次,因为您已经分配了它并且它仍然存在于您的元素中。无论如何,这就是您可以在另一个视图中获取此值的方式。
您的视图 2 controller 应如下所示。
public ActionResult View2(string value)
{
// ......
ViewBag.StorageItem = value;
return View();
}
每当您调用此视图时,请在参数内传递value。在视图 2 中,您可以在 ViewBag.StorageItem 的任何部分中检索此值。
你是如何在View2操作方法中设置value的?
您可以通过script 或controller 执行此操作。如果您是通过脚本进行的,请像这样设置value...
<script>
var audioElement = document.getElementById(audioId);
if (typeof (Storage) !== "undefined") {
localStorage.setItem("audiourl", audioElement);
document.getElementById("result").innerHTML = localStorage.getItem["audiourl"];
}
// redirecting to view 2..
window.location.href = "/controller_name/view2?value=" + localStorage.getItem["audiourl"];
</script>
这很简单,但是如果您想从 controller 级别执行此操作,那么您不能只使用 ViewBag 从一个 action 方法 到另一个或从 view 到 controller。为此,您可以定义一个视图模型属性,您可以使用该属性将数据发布回视图 1 的 controller ,然后可以将此值传递给视图 2 的 controller 即说你在您的视图模型中有一个名为 StorageItem 的属性。
@Html.HiddenFor(x => x.StorageItem)
控制器
[HttpPost]
public ActionResult View1(MyModel model)
{
// ....
var storageItem = model.StorageItem;
// ....
// ....
}
如果您没有将视图与任何模型绑定,您仍然可以在控制器中访问该值,使用 Request.Form["StorageItem"]。
<input type = "hidden" name="StorageItem" value="" />
<script>
var audioElement = document.getElementById(audioId);
if (typeof (Storage) !== "undefined") {
localStorage.setItem("audiourl", audioElement);
var item = localStorage.getItem["audiourl"];
document.getElementById("result").innerHTML = item;
document.getElementById("StorageItem").value = item;
}
</script>
控制器
[HttpPost]
public ActionResult View1()
{
// ....
var storageItem = Request.Form["StorageItem"];
// ....
// ....
}
除了不存在参数less Post 动作之外,这只是一个想法,如果你不使用模型,你会怎么做。
总结:我不知道您使用localStorage 的目的,但如果您只是将值从一个视图传递到另一个视图,那么您可以省略它,因为您可能已经注意到它并不重要,但最终它是您的偏好。