2010-02-05 6 views
1

Я хотел бы использовать некоторые теги сервера внутри функции JavaScript:Доступ Теги сервера внутри Javascript в проекте MVC

<%=Model.HtmlProperty%> 

В прошлом я хранится это значение в скрытом поле ввода, но когда свойство HTML содержит проблемы со специальными символами, такими как кавычки. Я хотел бы избежать необходимости кодировать и декодировать в контроллере, чтобы избежать проблем со специальными символами.

Rick Strahl имеет coupleposts по этой проблеме в проекте веб-форм, но я ищу элегантное решение для проекта MVC.

ОБНОВЛЕНИЕ: Нижеприведенный ответ Роберта Харви предлагает кодировать html. Опять же, что не то, что я хочу сделать. В конечном счете, я пытаюсь ввести html-скрипт в экземпляр fckeditor. Это должно быть сделано в javascript. Я пытаюсь выяснить, как получить доступ к значению <%=Model.HtmlProperty%> внутри javascript, не сохраняя закодированный текст в скрытом элементе ввода.

+0

Вы можете сохранить его в скрытый контент ДИВ; внутри переменной JS; как функция JS, которая возвращает строку; просто закодируйте его правильно. Вы не можете получить доступ к тегам сервера из JS; JS работает в браузере и может получить доступ к переменным JS, полям HTML, файлам cookie ... выберите себя. – queen3

ответ

0

кажется, что я надеялся, что делать - с помощью тегов сервера в JavaScript - это не возможно. Я сохранил строку внутри скрытого элемента ввода, и, согласно комментарию queen3, кажется, что мне придется продолжать делать то, что я делаю все это время. Спасибо всем за ваш вклад.

0

заимствование от должности Рика Стрэхл, и изменения Вызывающей подписи немного, функция для кодирования яваскрипта строки (после изменения в метод расширения для класса Html) выглядит следующим образом:

public static string EncodeJsString(this HtmlHelper h, string s) 
{ 
    StringBuilder sb = new StringBuilder(); 
    sb.Append("\""); 
    foreach (char c in s) 
    { 
     switch (c) 
     { 
      case '\"': 
       sb.Append("\\\""); 
       break; 
      case '\\': 
       sb.Append("\\\\"); 
       break; 
      case '\b': 
       sb.Append("\\b"); 
       break; 
      case '\f': 
       sb.Append("\\f"); 
       break; 
      case '\n': 
       sb.Append("\\n"); 
       break; 
      case '\r': 
       sb.Append("\\r"); 
       break; 
      case '\t': 
       sb.Append("\\t"); 
       break; 
      default: 
       int i = (int)c; 
       if (i < 32 || i > 127) 
       { 
        sb.AppendFormat("\\u{0:X04}", i); 
       } 
       else 
       { 
        sb.Append(c); 
       } 
       break; 
     } 
    } 
    sb.Append("\""); 

    return sb.ToString(); 
} 

Каких позволит вам назвать это так:

<%= Html.EncodeJsString(Model.HtmlProperty) %> 
+0

Спасибо за это, однако это не позволит мне использовать тег сервера внутри javascript. Я пытаюсь ввести html-код в fckeditor без необходимости хранить кодированный html внутри скрытого элемента ввода html. См. Мое обновление выше. – splatto

0

Используйте HtmlHelper написать свой сценарий на лету ..

 

public static string WriteLightboxScript(this HtmlHelper helper, string galleryName) 
     { 
      var builder = new TagBuilder("script"); 
      builder.MergeAttribute("type", "text/javascript"); 
      builder.SetInnerText("$(function() {$('a[rel=" + galleryName + "]').lightBox();});"); 
      return builder.ToString(TagRenderMode.Normal); 
     }