我可以使用服务器端JavaScript编写Razor视图吗?

5
我最近与一位没有C#经验的前端开发人员合作,他将编写我正在构建的ASP.NET MVC3应用程序的视图。由于大多数Web开发人员都了解Javascript,因此我认为让他在Razor视图中使用Javascript编写服务器端代码片段会很棒。我知道视图中除输出变量等之外并没有太多的代码,但是还有一些基本的循环等操作。我也非常喜欢在视图中同时使用客户端和服务器端代码相同的语言的想法。我想做的这个是否可行?这是Node.js的功能吗?(我完全没有看过它。)
5个回答

2
ASP.NET MVC要求您使用.NET 4.0。因此,您可以使用任何编译为MSIL的CLS兼容语言来构建服务器端。至于javascript,JScript.NET现在已经过时,目前我不知道有什么替代方案。
就Razor而言,解析器支持的唯一语言是C#和VB.NET。如果您想使用其他语言,则必须构建一个解析器或使用另一种视图引擎。

Razor支持非C#语言吗?我想使用js编写视图而不是控制器。 - David Pfeffer
@DavidPfeffer,就视图而言,Razor只支持C#和VB.NET。解析器仅内置了对这两种语言的支持。我认为您应该寻找另一种视图引擎。但是,说实话,如果您使用C#编写服务器端代码,并决定使用Razor作为视图引擎,不使用C#会非常奇怪。 - Darin Dimitrov
1
目标是让视图开发人员感到舒适,即使他们不懂C#。雇用具有js和HTML经验的人比雇用具有C#和HTML经验的人更容易。 - David Pfeffer
@DavidPfeffer,你不能用Razor做这件事。 - Darin Dimitrov

1

0
我使用了https://github.com/pauldotknopf/JavaScriptViewEngine,并且它仍在更新。
这样,您可以为Razor视图(服务器端c# -- Razor ViewEngine)设置JavaScript视图(服务器端js -- JS ViewEngine)的替代方案。您还可以将其用于React和/或JavaScript。
我使用它使得服务器端代码和前端代码相同 ;)

0

我怀疑一个优秀的Javascript程序员在学习一些C# / VB.Net的小知识点以编写视图时不会遇到太多麻烦。

然而,一个可能的仅使用JS的替代方案是仅输出JS和基本的HTML布局,并使用ajax调用控制器操作来获取数据并使用JS动态构建视图的HTML。对我来说,这似乎是一个过于复杂的方法,但如果您的UI开发人员无法掌握一些简单的C#编程技能,那么这可能是一个解决方案。


-1
你可以在 Razor 页面上使用 JavaScript 和 HTML。你甚至可以结合这两个:例如:
<script>
     $(document).ready(function() {
       var note = {
          workflow: @Html.Raw(Json.Encode(Model))
       };
       // do something with note
    });
</script>

但是如果你只计划做简单的循环,Razor 可能有些过头了。Razor 能够轻松完成简单的循环,并且学习起来也不难。您已经在为您的朋友构建视图模型吗?

当然,一些 JavaScript 开发将完全绕过视图模型。取而代之的是使用 ajax 调用检索模型数据并在客户端上维护其状态(例如,backbone 鼓励采用这种方法)。


这根本没有回答JS是否可以用作Razor页面的服务器端语言的问题。 - David Pfeffer
Razor不是一种语言,而是一个视图引擎。 - David Pfeffer
Razor是一种视图引擎,你说得对。提问者提到开发人员想在Razor视图中使用JavaScript进行服务器端代码片段。这段代码是我们实际项目中的一个示例,展示了如何实现这一点。你仍然需要了解一些Razor知识,但你可以将两者结合起来(在一定程度上)。我认为这值得指出。 - Daniel
“提问者”是我。你所做的是使用服务器端模型(作为JSON发送)的客户端js,这与要求的完全不同。请注意,问题明确说明了我想要使用服务器端js而不是C#。 - David Pfeffer
啊哈。我想我不确定你说的是在单个视图中结合服务器端和客户端js的意思。Darin Dimitrov的答案更针对这个问题。我的答案是按照K. Bob的建议编写的代码。我们有一个开发人员比较擅长javascript而不是C#,这就是我们使用的方法。 - Daniel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接