我从一个视图传递本地存储中的值,我想在c#函数的另一个视图中调用此值。两个动作结果都在同一个控制器中。我不知道如何在c#中调用这个本地存储值可以帮助我吗?
view1.cshtml:
<script>
...
var audioElement = document.getElementById(audioId);
// Check browser supporta
if (typeof (Storage) !== "undefined") {
//Store
localStorage.setItem("audiourl", audioElement);
//Retrieve
document.getElementById("result").innerHTML = localStorage.getItem["audiourl"];
}
</script>
<div id="result"></div>
通过这个值已经传递,现在如何从c#函数的另一个视图中的localstorage
接收这个值作为参数。
答案 0 :(得分:5)
本地商店位于客户端。它不会被发送到服务器,也无法从服务器代码访问。
如果您需要在服务器代码中使用它,则必须自己明确发送。
答案 1 :(得分:2)
可能会有点长,所以我把它作为答案而不是评论。它更像是一种逻辑,实际的实现取决于你,但分享这个想法是主要目标。
在此之前,让我回想一下你在这里做的事情。
<script>
var audioElement = document.getElementById(audioId);
if (typeof (Storage) !== "undefined") {
localStorage.setItem("audiourl", audioElement);
document.getElementById("result").innerHTML = localStorage.getItem["audiourl"];
}
</script>
如果您在DOM
属性中分配localStorage
元素引用(可能是您打算存储值但我没有详细说明),那么我没有看到将其取回的重点几乎同时从localStorage
再次,因为你已经分配了它,它仍然存在于你的元素中。无论如何,这是你可以在另一个视图中获取此值的方法。
您的观点2 controller
应如下所示。
public ActionResult View2(string value)
{
// ......
ViewBag.StorageItem = value;
return View();
}
每当您调用此视图时,请在参数内传递value
。在视图2中,您可以在ViewBag.StorageItem
。
如何在value
操作方法中设置View2
?
您可以从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
到其他或从视图到控制器。为此,您可以定义一个视图模型属性,您可以使用该属性将数据发布回视图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"];
// ....
// ....
}
除了参数少Post
动作不存在之外,如果您没有使用模型,这只是一个想法。
总结:我不知道您使用localStorage
的目的,但如果您只是将值从一个视图传递到另一个视图,那么您可以省略你可能已经注意到它并不重要但最终是你的偏好。