2016-02-05 2 views
0

У меня есть следующий код в моем режиме бритвы, мне нужно установить некоторые переменные javascript, чтобы установить значение, исходящее от бритвы.Как правильно комбинировать javascript с синтаксисом бритвы

Однако значения переменных не заданы.

var listPuntos =[]; 
    function onSelect(e) { 
     var dataItem = this.dataSource.view()[e.item.index()]; 
     @{ 
      var proveedorID = 0; 
      <text>proveedorID = dataItem.ProveedorID</text> 
      var list = new UnitOfWork().PuntosVentaProveedorRepository.Get().Where(x => x.ProveedorID == proveedorID); 
      proveedorID = 0; 
      <text>listPuntos = list; </text>; 
      <text> 
       var displayText; 
       $.each(listPuntos, function (key, value) { 
        if (displayText == undefined) 
         displayText = value.Nombre + ', '; 
        else 
         displayText = displayText + value.Nombre + ', '; 
       }); 
       document.getElementById("puntos").value = displayText.slice(0,-2); 
      </text> 
     } 

    } 
+0

переменные, – CodeNotFound

+0

Непонятно, что вы пытаетесь достичь или какие результаты вы получаете и что ожидаете. 'var list = new UnitOfWork (...' - это код бритвы и оценивается на сервере перед его отправкой в ​​представление (и является результатом '.Where (x => x.ProveedorID == 0)'. javascript variable - 'proofedorID = dataItem.ProveedorID' не изменяет результат' var list'. –

+1

Если вы хотите фильтровать результаты на клиенте, вам нужен ajax для вызова метода сервера, который возвращает результаты, которые вы хотите, или вам нужно для хранения всего на клиенте (назначенного массиву javascript) и поиска этого массива (но вы сделали бы это только в том случае, если нефильтрованный набор результатов невелик) –

ответ

2

Учитывая Ваш конкретный пример, я хотел бы начать с сокращения количества <text> блоков, необходимых вместо этого просто обернув сокращенный C# бит с @{ … }. Это улучшает читаемость & уменьшает путаницу. Например:

var listPuntos =[]; 
    function onSelect(e) { 
     var dataItem = this.dataSource.view()[e.item.index()]; 
     @{ var proveedorID = 0; } 
     proveedorID = dataItem.ProveedorID; 
     @{ var list = new UnitOfWork().PuntosVentaProveedorRepository.Get().Where(x => x.ProveedorID == proveedorID); } 
     proveedorID = 0; 
     listPuntos = @Json.Encode(list); 
     var displayText; 
     $.each(listPuntos, function (key, value) { 
      if (displayText == undefined) 
       displayText = value.Nombre + ', '; 
      else 
       displayText = displayText + value.Nombre + ', '; 
     }); 
     document.getElementById("puntos").value = displayText.slice(0,-2); 
    } 

Далее, чтобы придать значения C# в код JavaScript, излучаемый сервер, вам нужно закодировать значение в JavaScript. Лучший способ сделать это - преобразовать его в JSON. Это делается выше, используя Json.Encode. В частности, чтение линии:

 listPuntos = @Json.Encode(list); 

Я использовал Json.Encode, но, конечно, вы можете использовать любой формат JSON библиотеку дежурных, который соответствует вашему проекту.

+1

Это будет когда-либо возвращать точно такие же результаты при каждом запуске, потому что 'list 'всегда является результатом' .Where (x => x.ProveedorID == 0) ' –

1

необходимо разделить html-код и код javascript. Прежде всего, не вызывайте код сервера из представления, когда View загружается. Нажмите все необходимые массивы и т. Д. С помощью свойства модели в соответствующем формате (т. Е. В формате json), а затем заполните любой список клиентов из значения этого свойства. Во-вторых - перемещение кода, как это:

 var displayText; 
     $.each(listPuntos, function (key, value) { 
      if (displayText == undefined) 
       displayText = value.Nombre + ', '; 
      else 
       displayText = displayText + value.Nombre + ', '; 
     }); 
     document.getElementById("puntos").value = displayText.slice(0,-2); 

в соответствующий раздел, как это:

@section scripts 
{ 
    <script> 
..... 
    </script> 
} 
Смежные вопросы