2013-02-28 2 views
1

Мне нужно использовать @(ViewData["value"]); в document.ready. Но когда я использую @(ViewData["value"]), все jQuery не работают. Мой образец приведен ниже:JQuery не работает в cshtml странице

$(document).ready(function() { 
    var test = @(ViewData["value"]); // remove this line query has been working 
    if (test != null){ 
     //my code 
    } 
}); 
+0

может быть, это одна поможет вам тест вар = @ (serializer.Serialize (ViewData [ "значение"])); – snowp

ответ

2

При использовании C# внутри тега скрипта вам нужно приложить переменную C# в кавычки. Попробуйте

$(document).ready(function() { 
     var test = '@(ViewData["value"])'; 
      if (test != null){ 
    } 
    }); 

Если значение вашей ViewData [ «значение»] это число, это нормально, если вы не заключите его в кавычки, но если это строка с пробелами, например ViewData [ «значение»] = "Hello World "в вашем браузере появится сообщение" SyntaxError: missing, before statement ", поэтому ваши скрипты или jquery больше не будут работать.

1

ViewData не доступен на клиенте, поскольку он существует только при визуализации рендеринга. возможного вариант

  1. сериализовать просматривать данные в формат JSON на стороне сервера
  2. запись его скрытое поле, и их разбор его объекты JavaScript на стороне клиента.
+0

IMHO, что пытается сделать OP, также является возможной возможностью: доступ к «ViewData» при визуализации сценария – andri

3

вместо доступа к @(ViewData["value"]); внутри javascript, лучше поместить это значение в скрытое поле или другой элемент. Посмотрите на код ниже:

<input id="some-id" type="hidden" value="@(ViewData["value"]);" /> 

... 
... 
... 
$(document).ready(function() { 
    var test = $("#some-id"); 
    if (test != null){ 
     //my code 
    } 
}); 
+0

Этот ответ хорош, но в высоко оптимизированном веб-приложении неприемлем. Представьте, что ваше веб-приложение, которое вызывает ViewData ["value"], возвращает данные с размером 20kb, тогда вы сохраняете размер 20kb в скрытое поле, которое в свою очередь добавило 20kb к размеру вашей страницы, поэтому в ваш весь веб-процесс добавляется 40kb –

0

Если ViewData["value"] является string, вы можете попробовать это:

var test = '@ViewData["value"]';