2015-11-11 1 views
0

Я передаю значение в локальном хранилище с одного представления, и я хочу вызвать это значение в другом представлении в функции C#. Оба результата действия находятся в одном контроллере. Я не знаю, как назвать это значение локального хранилища в 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> 

Делая это значение было передано, теперь как получить это значение из localstorage в другой точке зрения в C# функции в качестве параметра.

+0

Я вижу, что вы отметили «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

+0

@ Rohit416 Нет, я не хочу передавать значение от js к контроллеру. на самом деле я хочу передать значение из js view1 в C# view2 означает, что нужно передать значение из одного представления в другое. – dania

ответ

4

Местное хранилище находится на стороне клиента. Он не отправляется на сервер и недоступен из кода сервера.

Если вам это необходимо в коде сервера, вам придется явно отправить его самостоятельно.

+1

как отправить его явно. не могли бы вы рассказать о своем ответе? Я не получаю ваш ответ. – dania

1

Это может быть немного длинным, поэтому я помещаю его как ответ, а не комментарий. Это скорее логика, реальная реализация зависит от вас, но разделение идеи - главная цель.

До этого позвольте мне вспомнить, что вы здесь делаете.

<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, но если бы вы использовали его только для передачи значения из одного вида в другой, то вы можете пропустить, что, как вы могли заметить, что это не но в конечном итоге это ваше предпочтение.

+0

ваше решение работает, но window.location.href = "/ controller_name/view2? Value =" + localStorage.getItem ["audiourl"]; перенаправляет меня на другую страницу, а view2 - это всплывающее окно, которое я вызываю на моем представлении. – dania

+0

О, теперь вы даете детали, которые вы должны были дать раньше. В этом случае вы не можете использовать 'window.location.href', вместо этого вам нужно сделать ajax-вызов для действия« View2 »вместе с' data'. – Rohit416

+0

извините за это, теперь вы можете рассказать мне, как сделать ajax-вызов для действия View2 вместе с данными. – dania

Смежные вопросы