javascript 如何在C#代码中从本地存储中检索值?

ego6inou  于 2023-05-05  发布在  Java
关注(0)|答案(2)|浏览(112)

我从一个视图传递一个值到本地存储,我想在另一个视图中调用这个值。两个动作结果在同一个控制器中。我不知道如何在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>

通过这样做,这个值已经被传递,现在如何从localstorage在另一个视图中接收这个值在c#函数中作为参数。

iklwldmw

iklwldmw1#

本地存储在客户端。它不会被发送到服务器,并且不能从服务器代码访问。
如果您在服务器代码中需要它,则必须自己显式发送它。

omqzjyyz

omqzjyyz2#

实际执行由您决定;我在分享这个想法。
你的View 2控制器应该看起来像这样:

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

每当调用此控制器时,都将该值提供给它。在View 2中,您可以使用ViewBag.StorageItem在任何节中检索此值。

注意:ViewBag是ASP.NET MVC中的动态属性,不需要类型转换,可以动态转换类型。
在View 2动作方法中设置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。为此,您需要一个视图模型属性,您可以使用该属性将数据发送回View 1的控制器,然后View 1可以将此值中继到View 2的控制器。
例如:如果在视图模型中有一个名为StorageItem的属性,那么可以将其绑定到视图中的隐藏字段中。

超文本标记语言

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

控制器

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

不能使用视图模型?

这将是理想的,但万一你不能,那么你仍然可以访问控制器中的值使用Request.Form["StorageItem"]如下。

超文本标记语言

<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中是无关紧要的。有更好的选择。

相关问题