2016-05-08 3 views
0

Обратите внимание: это противоречит обычному вопросу.Как встроить JavaScript в LINQ expressionin Razor?

У меня есть функция, которая добавляет оценку к управлению, признанному определенным директором. Проблема в том, что верхний предел хранится в модели страницы Razor. Мне нужно добраться до него, используя указатель, который у меня есть из идентификатора моей кнопки.

@ Model.Answers.Single (=> .id == ЗДЕСЬ БЫТЬ JS GUID) .MAX
GUID, составляет $ (Вызывающий) .attr ("ID"). ЗиЬзЬг (3)

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

function adjustScore(invoker, delta) { 
    var target = $("#val" + $(invoker).attr("id").substr(3)); 
    var newValue = +target.html() + delta; 
    var max = @Model.Answers.Single(_=>_.Id == new Guid()).Max; 
    if (newValue < 0 || newValue >= max) 
    newValue = 0; 
    target.html(newValue); 
} 
+0

Код бритвы на стороне сервера и оценивается перед отправкой представления клиенту. Переменная javascript даже не существует в этой точке. –

+0

Если код Razor генерирует кнопку, тогда он также может генерировать предел, который может использоваться JavaScript. –

ответ

1

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

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

function adjustScore(invoker, delta) { 
    var target = $("#val" + $(invoker).attr("id").substr(3)); 
    var newValue = +target.html() + delta; 

    $.get("@Url.Action("GetMax","Home")",function(max){ 
     if (newValue < 0 || newValue >= max) 
      newValue = 0; 

     target.html(newValue); 
    }); 

} 

Предполагая, что вы имеете метод с GetMax действия в вашем HomeController, которая возвращает максимальное значение в виде десятичного значения.

public decimal GetMax() 
{ 
// query your data and return a decimal 
} 

Я использую Url.Action вспомогательный метод для создания правильного относительного пути к методу GetMax. Если ваш код находится внутри внешнего файла javascript, используйте подход, упомянутый в this post.