如何在Razor的LINQ表达式中嵌入JavaScript?

时间:2016-05-08 21:41:46

标签: javascript c# asp.net-mvc linq razor

请注意,这与通常的问题相反。

我有一个功能,可以为某个guid识别的控件添加分数。问题是上限存储在Razor页面的模型中。我需要使用我从按钮ID获得的guid来实现它。

  

@ Model.Answers.Single( => .Id ==这里是JS GUID).Max
  guid是$(调用者).attr(“id”)。substr(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);
}

1 个答案:

答案 0 :(得分:1)

Razor代码在服务器中执行,razor将生成的输出发送到浏览器。您的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中提到的方法。