2015-07-01 2 views
1

Я хочу использовать переменную JavaScript в бритве, как это:Использования бритвы и JavaScript внутри друг друг

моего HTML:

@{List<AddTempViewModel> tempsToView = new List<AddTempViewModel>(); 
    tempsToView = (List<AddTempViewModel>)ViewData["tempsToView"];} 

@if (tempsToView != null) 
{ 
    @foreach (var item in tempsToView) 
    { 
     <a class="click" id="@item.TempDocumentId"> 
     <img id="leftSideBarElement" src="@item.TempDocumentAddressUrl" /> 
     </a><br /> 
    } 
<form method="post" action=""> 
    <input id="documentNumber" class="form-control" type="text" name="" 
    placeholder="Email" /> 
</form> 

и мой сценарий:

<script> 

    $(document).ready(function() { 
     $(".click").click(function() { 
      var divID = $(this).attr('id'); 
      alert(divID); 
      var docName = @tempsToView[divID].TempDocumentId 
      $("#documentNumber").val(docName); 
     }); 
    }); 
</script> 

, но я могу 't установить индекс @tempsToView с divID. , пожалуйста, помогите мне, что делать, кроме этого. спасибо.

+0

Можете ли вы опубликовать остальную часть соответствующего кода просмотра? – br4d

+0

Вы пытаетесь установить значение 'documentNumber' в свой' @tempsToView []. Свойство TempDocumentId'? Если да, то почему вы не указали индекс массива? –

+0

Потому что он генерируется после компиляции. Я хочу динамически установить индекс этого списка. – MHSFisher

ответ

2

Вы не можете установить переменную Razor на основе того, что происходит в JavaScript. Razor работает на стороне сервера, а JavaScript работает на стороне клиента, ведь Razor уже запущен.

+0

Итак, что вы предлагаете мне сделать, кроме этого? – MHSFisher

+0

Вы ничего не можете сделать, кроме как изменить свой код, чтобы подойти к проблеме по-другому. Вы не указали какие-либо сведения о том, чего вы на самом деле пытаетесь достичь здесь, но в основном, если вам нужен доступ к данным за '@ tempsToView' в среде выполнения JavaScript, вам нужно будет либо установить некоторую переменную JavaScript эти данные ранее в вашем коде или использовать AJAX для извлечения его после факта. –

+0

На самом деле я заполняю список в контроллере и отправляю его на свой вид. У меня есть тег, который я хочу, когда он щелкнул, чтобы установить некоторые значения во входной тег. Что я должен делать, кроме этого? – MHSFisher

0
<script> 

    $(document).ready(function() { 
     var divID = $(this).attr('id'); 
     alert(divID); 
     var documentName = $(@Html.Raw(JsonConvert.SerializeObject(tempsToView)))[divID]; 
     console.log(documentName); 
    }); 

</script> 
2

Это не совсем понятно, что вам нужно, но если я вас правильно ... Я использовал, чтобы сделать эту смесь Бритвы и Js, но в конечном счете, я понимаю, 2 вещи:

  • It выглядит довольно уродливо
  • Он не будет работать, если вы переместите код js в отдельный .js-файл, потому что движок Razor не обрабатывает JS-файлы.

Так простое и элегантное решение было бы использовать атрибуты данных:

@foreach (var item in tempsToView) 
     { 
      <a class="click" id="@item.TempDocumentId" 
      data-document-name="@item.TempDocumentName" 
      data-document-isbn="@item.TempDocumentIsbn"> 
      <img id="leftSideBarElement" src="@item.TempDocumentAddressUrl" /> 
      </a><br /> 
     } 

А потом просто получить данные-недвижимость, которую нужно нравится:

$(document).ready(function() { 
    $(".click").click(function() { 
     var divID = $(this).attr('id'); 
     alert(divID); 
     var docName = $(this).attr('data-document-name'); 
     var docIsbn = $(this).attr('data-document-isbn'); 
     //and any other property you may need 
     $("#documentNumber").val(docName); 
    }); 
}); 

Таким образом, вы держите, все ваши HTML/Razor и JS разделены, и все еще функциональны, чистый код, и каждый элемент является самодостаточным.

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