【问题标题】:Is it possible to extend the Model in the Razor file into a separate Javascript file?是否可以将 Razor 文件中的模型扩展为单独的 Javascript 文件?
【发布时间】:2015-12-11 22:45:58
【问题描述】:

我有一个 Razor cshtml 文件,它引用了一个服务器端 MyModel 和一个客户端 javascript 文件,我希望在其中保留所有 JavaScript 功能:

foo.cshtml

@model BunnyModel
@section scripts {
    <script type="text/javascript" src="foo.js"></script>
}

foo.js

function doStuff() {
    $("#blah").text("Bunnies: " + @Model.BunnieCollection.Count);
}

当然,VS2015 无法识别 foo.js 文件中的 BunnyModel。

是否可以向 Visual Studio 提供某种类型的提示,以便它在 .js 文件中提供模型智能感知?

【问题讨论】:

  • Razor 代码在发送到视图之前在服务器上进行评估,并且 Razor 代码不在外部 js 文件中评估,因此这是不可能的
  • 你不能为 javascript 使用 TypeScript 并为模型设置一个 interface 吗?我知道这是一个飞跃,但 / 会 / 给你智能。
  • @StephenMuecke 我明白这一点,但我在 .js 文件中编码时需要智能感知。

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


【解决方案1】:

你可以把js放在cshtml中:

@model BunnyModel
@section scripts {
    <script type="text/javascript">
        function doStuff() {
            $("#blah").text("Bunnies: " + @Model.BunnieCollection.Count);
        }
    </script>
}

...或者把变量放到作用域中,在外部函数中引用:

cshtml

@model BunnyModel
@section scripts {
    <script type="text/javascript">
        var bunnieCount = @Model.BunnieCollection.Count
    </script>
    <script type="text/javascript" src="foo.js"></script>
}

foo.js

function doStuff() {
    $("#blah").text("Bunnies: " + bunnieCount);
}

【讨论】:

  • 我不是这种方法的忠实拥护者,因为兔子模型可能是一个非常复杂的模型。我必须复制很多东西。我怀疑我最终会将模型转换为 JSON 并将其分配给 javascript 变量。另外,也不是很好。
  • 是的,序列化是要走的路。我认为没有人真正喜欢这种方法,只是没有任何好的选择。
  • 我不明白为什么 Visual Studio 不能有一个指令(类似于 razor 文件中使用的指令)告诉它为特定模型提供智能感知。
  • 他们可能可以。那不是问题。 foo.js 不在 MVC 管道中呈现;它在不同的请求中静态提供。所以 RazorView 永远不会解析 foo.js 中的“@Model.BunnieCollection.Count”。即使在管道中渲染,也是不同的请求,所以没有模型。
猜你喜欢
  • 2020-05-16
  • 2013-08-09
  • 1970-01-01
  • 2023-04-04
  • 2017-04-10
  • 1970-01-01
  • 1970-01-01
  • 2023-02-09
  • 2017-01-03
相关资源
最近更新 更多