如何在c#代码中从本地存储中检索值

本文关键字:存储 检索 代码 | 更新日期: 2023-09-27 18:21:39

我从一个视图在本地存储中传递一个值,我想在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接收这个值作为参数。

如何在c#代码中从本地存储中检索值

本地存储在客户端。它不会发送到服务器,也无法从服务器代码中访问。

如果你在服务器代码中需要它,你必须自己明确地发送它。

实际实现取决于您;我正在分享这个想法。

你的View2控制器应该是这样的:

public ActionResult View2(string value)
{
    // ......
    ViewBag.StorageItem = value;
    return View();
}

无论何时调用该控制器,都要将该值提供给它。在View2中,您可以使用ViewBag.StorageItem在任何部分检索该值。

注意:ViewBag是ASP.NET MVC中的动态属性,它不需要类型转换和动态转换类型。

在View2操作方法中设置value

您可以从JavaScript或控制器设置它。

使用JavaScript

var audioElement = document.getElementById(audioId);
if (typeof (Storage) !== "undefined") {
    localStorage.setItem("audiourl", audioElement);
    document.getElementById("result").innerHTML = localStorage.getItem["audiourl"];
}
// redirecting to View2..
window.location.href = "/controller/view2?value=" + localStorage.getItem["audiourl"];

使用控制器

在这种情况下,如果要将值从一个操作方法传递到另一个,或从视图传递到控制器,则不能使用ViewBag。为此,您需要一个视图模型属性,可以使用该属性将数据发布回View1的控制器,然后View1可以将此值中继到View2的控制器。

例如:如果视图模型中有一个名为StorageItem的属性,则可以将其绑定到隐藏字段中的视图中。

HTML

@Html.HiddenFor(x => x.StorageItem)

控制器

[HttpPost]
public ActionResult View1(MyModel model)
{
    // Do something with the value
    var storageItem = model.StorageItem;
    // ....
}

无法使用视图模型

不过,这将是理想的,但如果不能,您仍然可以使用Request.Form["StorageItem"]访问控制器中的值,如下所示。

HTML

<input type = "hidden" id="StorageItem" name="StorageItem" value="" />

JavaScript

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;
}

控制器

[HttpPost]
public ActionResult View1(Something something)
{
    // ....
    var storageItem = Request.Form["StorageItem"];
    // ....
    // ....
}

提示:如果您使用localStorage只是为了传递值,那么它在ASP.NET MVC中是无关紧要的。还有更好的选择