具体的实现取决于您,我只是分享了这个想法。
您的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"];
}
window.location.href = "/controller/view2?value=" + localStorage.getItem["audiourl"];
使用控制器
如果您想要从一个操作方法传递值到另一个操作方法,或者从视图传递值到控制器,则不能在此情况下使用ViewBag
。您需要一个视图模型属性来实现此目的,您可以使用该属性将数据发送回View1的控制器,然后将此值传递给View2的控制器。
例如:如果您的视图模型中有一个名为StorageItem
的属性,则可以在视图中绑定它到一个隐藏字段中。
HTML
@Html.HiddenFor(x => x.StorageItem)
控制器
[HttpPost]
public ActionResult View1(MyModel model)
{
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"];
}
提示: 如果你只是为了在 ASP.NET MVC 中传递值而使用 localStorage
,那么它是不重要的。有更好的选择可供使用。
Asp.Net MVC 5
,如果你知道发生了什么,这并不难实现。基本上,你想要的是将一个值从JS
传递到MVC 控制器
。在这里看一下。 - Rohit416