【问题标题】:Setting a JavaScript variable value inside razor view code to either a model value or a JavaScript value将 razor 视图代码中的 JavaScript 变量值设置为模型值或 JavaScript 值
【发布时间】:2020-11-23 18:49:53
【问题描述】:

所以我已经阅读了一些其他主题,例如thisthis。但我还没有找到任何可以回答我的具体问题的东西。

我想将 JavaScript 变量设置为两个可能值之一(我们称它们为 V1 和 V2),条件是某个模型属性的值。 V1 来自模型,V2 来自另一个 JavaScript 属性。不幸的是,由于各种 API 使用数据的方式,我不能只评估在控制器中使用这两个值中的哪一个并将其交给视图。这是我的目标示例,但无法编译:

<script type="text/javascript">
  var defaultValue = 'Hello';
  @{
    if(Model.ValueSpecified)
      var myValue = '@(Model.ValueToUse)';
    else
      var myValue = defaultValue;
  }
</script>

因此,如果模型具有trueValueSpecifiedGoodbyeValueToUse,则生成的脚本行应该是: var myValue = 'Goodbye';。但如果模型ValueSpecifiedfalse,那么我希望脚本行读取var myValue = 'Hello';

然后我熟悉了 Html.Raw() 并尝试了这个:

<script type="text/javascript">
  var defaultValue = 'Hello';
  @if(Model.ValueSpecified)
  {
    @Html.Raw("var myValue = '" + Model.ValueToUse + "';");
  }
  else
  {
    @Html.Raw("var myValue = defaultValue;");
  }
</script>

并且输出按预期工作。但这似乎很不靠谱。有没有更好的方法来处理razor内部的js流控?

感谢您的帮助!

【问题讨论】:

    标签: javascript asp.net-core-mvc


    【解决方案1】:

    将 C# 控制流与 javascript 混合使用有点尴尬。试试这个:

    var defaultValue = 'Hello';
    var myValue = @Json.Serialize(Model.ValueSpecified) 
      ? @Json.Serialize(Model.ValueToUse) 
      : defaultValue;
    

    这完全是 javascript 控制流,只是使用来自 Razor 的值。

    【讨论】:

    • 我完全同意,当我在剃刀代码中键入 js 行时,我感到畏缩。感谢您的提示!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 1970-01-01
    • 2020-10-28
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多