Получение переменной MVC2 в Jquery - PullRequest
0 голосов
/ 14 ноября 2011

Я пытаюсь манипулировать переменной представления asp.net MVC2 в Jquery ...

(function () {
    debugger;
    var $a = 10;
    var $b = '<%:toggle %>';
    var $c = 12;
});

Как вы уже догадались, я пытаюсь манипулировать переменной переключения, которую я инициировал в ASP.net MVC2 view в Jquery.

То, что я сделал выше, похоже, не работает вообще.Страница, которую я пытаюсь загрузить, взрывается каждый раз, когда я пытаюсь открыть ее.Есть идеи, почему это может быть?Примечание ... Даже если я избавлюсь от '' (апострофы), моя страница все равно будет взорвана.Я также попытался сделать эту переменную общедоступной.Кажется, это тоже не сработает.

ОБНОВЛЕНИЕ ОБОСНОВАНО против ТОГО, ЧТО Я ПОЛУЧИЛ Я не ожидаю получить это ...

my page with that value set to the variable in the view that I described earlier

Вот что я ожидаю my page when I set the variable equal to 11 or something trivial

Мне трудно получить сообщение об ошибке, которое отправляется на страницу.Я должен выяснить, где он генерируется, и попытаться отследить его оттуда.Мой коллега настроил некоторый сценарий маршрутизации ошибок Javascript для этой конкретной страницы.И у меня возникли небольшие проблемы с расшифровкой происходящего.Если бы я знал об ошибке, я, вероятно, был бы в хорошей форме.

ОБНОВЛЕНИЕ 2 Только что выяснил ошибку

TemplateInfo.aspx (371): ошибка CS0103: имя 'toggle' не существует в текущем контексте ...

Я предполагаю, что переменная должна быть каким-то образом обнародована или каким-то образом помещена в область видимости.Как может.Насколько мне известно, вы не можете создавать публичные переменные с MVC2?Вы можете?

1 Ответ

1 голос
/ 15 ноября 2011

Похоже, переменная toggle, которую вы пытаетесь использовать, нигде не определена в вашем представлении.

В действиях контроллера ASP.NET MVC обычно передаются модели представлений представлениям.Эти модели представления содержат свойства, которые будут использоваться представлением.Как и всегда в приложении ASP.NET MVC, вы начинаете с определения модели представления:

public class MyViewModel
{
    public bool IsToggle { get; set; }
}

, затем пишете действие контроллера, которое создает экземпляр этой модели представления и передает его представлению:

public ActionResult Index()
{
    var model = new MyViewModel
    {
        IsToggle = true
    };
    return View(model);
}

и, наконец, вы пишете строго типизированное представление для этой модели представления, где вы можете использовать его свойства:

<%@ Page 
    Language="C#" 
    MasterPageFile="~/Views/Shared/Site.Master" 
    Inherits="System.Web.Mvc.ViewPage<AppName.Models.MyViewModel>" %>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <script type="text/javascript">
    (function () {
        debugger;
        var $a = 10;
        var $b = <%= Model.IsToggle %>;
        var $c = 12;
    });    
    </script>

</asp:Content>

Теперь давайте предположим, что ваша модель представления содержит некоторые свойства типа string или даже другого типа.сложные объекты.В этом случае вам нужно будет правильно их кодировать.И лучший способ убедиться, что вы правильно кодируете значения, передаваемые в javascript, - это использовать литералы javascript (запись JSON):

<script type="text/javascript">
(function () {
    debugger;
    // we JSON serialize the entire model:
    var model = <%= new JavaScriptSerializer().Serialize(Model) %>;

    // Now you can manipulate individual model properties:
    alert(model.SomeProperty);
});    
</script>

Обратите внимание, что класс JavaScriptSerializer определенв сборке System.Web.Extensions в пространстве имен System.Web.Script.Serialization, поэтому убедитесь, что они включены в область.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...