Это может быть немного длинным, поэтому я помещаю его как ответ, а не комментарий. Это скорее логика, реальная реализация зависит от вас, но разделение идеи - главная цель.
До этого позвольте мне вспомнить, что вы здесь делаете.
<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>
Этого было достаточно просто, но если вы хотите сделать это с контроллер уровня, то вы можете, а не просто использовать ViewBag
в одиночку либо с одной метод действия другим или от вид до контролер. Для этого вы можете определить свойство модели представления, которое вы можете использовать для отправки данных обратно в контроллер 1, который затем может передать это значение . Контроллер 2 Предположим, у вас есть свойство в вашей модели с именем 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
, но если бы вы использовали его только для передачи значения из одного вида в другой, то вы можете пропустить, что, как вы могли заметить, что это не но в конечном итоге это ваше предпочтение.
Я вижу, что вы отметили «Asp.Net MVC 5», это не так сложно добиться, если вы знаете, что происходит. В основном, вы хотите передать значение с 'JS' на' MVC controller'. [Взгляните сюда] (http://stackoverflow.com/questions/13878418/how-to-pass-values-to-controller-from-javascript-code-in-mvc?lq=1). – Rohit416
@ Rohit416 Нет, я не хочу передавать значение от js к контроллеру. на самом деле я хочу передать значение из js view1 в C# view2 означает, что нужно передать значение из одного представления в другое. – dania