Итерация по словарю с помощью селектора java-скриптов - PullRequest
0 голосов
/ 30 ноября 2011

У меня есть словарь, на мой взгляд, есть [inputID, tooltip].

Также у меня есть набор идентификаторов элементов ввода на этой странице.Мне нужно перебрать словарь с идентификаторами элементов:

 @{
 Dictionary<string, string> questionMarks = 
     ViewBag.QuestionMarks as Dictionary<string, string>;
 @}

 <script type="java-script">
 $(document).ready(function () {
    var inputs = $('input,select[type!="hidden"]');
    $.each(inputs, function(i, val) {
    if ($(val).attr('id')) { 
                var id = $(val).attr('id');

                var iter_string = '@questionMarks' + "[" + id + "]";
                alert(iter_string);              // [1]
                alert('@questionMarks["cvc"]');  // here i got tooltip
             }
    });
</script>

[1] У меня есть System.Collection.Generic.Dictionary`2 [System.String, System.String] [cvc]

Благодаря Яну Йонгбуму, Наконец я получил то, что хотел:

@using System.Web.Script.Serialization
@{
    Dictionary<string, string> questionMarks = ViewBag.QuestionMarks as Dictionary<string, string>;
    JavaScriptSerializer jss = new JavaScriptSerializer();
@}
<script type="text/javascript">
    var questionMarks = @Html.Raw(jss.Serialize((Dictionary<string, string>)ViewBag.QuestionMarks));     
    $(document).ready(function () {
        for ( keyVar in questionMarks ) {
            $('#' + keyVar).attr('original-title', questionMarks[keyVar]);
            $('#' + keyVar).tipsy({ gravity: 'w' });
        }
    });
</script>

Ответы [ 4 ]

0 голосов
/ 30 ноября 2011

Чтобы удалить кавычки, используйте Html.Raw ()

var questionMarks = '@Html.Raw(jss.Serialize((Dictionary<string, string>)ViewBag.QuestionMarks))';
0 голосов
/ 30 ноября 2011

сделать что-то вроде

<script>
var questionMarks = @new JavaScriptSerializer().Serialize((Dictionary<string, string>)ViewBag.QuestionMarks) ;
</script>

Теперь у вас есть переменная javascript с именем questionMarks, которую вы можете перебирать.

0 голосов
/ 30 ноября 2011

Аттрибуты данных для входных данных при их отображении должны помочь вам в этом.

Пример: http://jsfiddle.net/Krch9/

$(document).ready(function(e) {
    var inputs = $("input", "#container");
    $.each(inputs, function(i, val) {
        var ToolTipText = $(this).data('tooltiptext');
        /// Run your tooltip plugin here ...
        $("#output").html($("#output").html() + "<br>" + $(this).attr('id') + " : " + ToolTipText);
    });
});

Используя помощников MVC, вы можете легко добавить их:

@Html.TextBoxFor(x => x.Field, new { data_tooltiptext = "Blah blah"});

Разметка в конечном итоге будет выглядеть примерно так:

<input type="text" id="Field" data-tooltiptext="Blah blah">

Редактировать: дополнительная помощь

IE Перебирать элементы

foreach( var question in questionMarks) {
   @Html.TextBox(question.Key, new { data_tooltiptext = question.Value} );
}

Затем используйте пример javascript (вам нужно изменить его в соответствии с вашими потребностями ...), чтобы запустить плагин для элементов

0 голосов
/ 30 ноября 2011

Нет, вы не можете перебирать код на стороне клиента через переменную сервера.Вы можете сгенерировать код инициализации из переменной JS (например, JSON) или сгенерировать необходимый HTML на стороне сервера.Также вы можете запросить такие данные из jsavascript через ajax-запрос.

...