- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 ASP.NET-MVC 框架开始一个新项目。我想在这个项目中使用 TypeScript 代替 JavaScript。 Visual Studio 很容易支持 TypeScript,但似乎与 .cshtml razor 文件不(完全)兼容。我能够在 .ts 文件中创建我的类并在我的 .cshtml 文件中调用这些类,问题是当我将参数传递给 .cshtml 文件中的对象时 TypeSafety 被忽略并且函数运行就像一个类型从未定义。
.ts 文件
export class SomeClass {
name: number;
constructor(public tName: number) {
this.name = tName;
}
public sayName() {
alert(this.name);
}
}
.cshtml 文件
var instance = new SomeClass("Timmy");
instance.sayName();
如您所见,我将一个字符串传递给构造函数,即使我明确定义了参数只接受数字,但 TypeSafely 被忽略并且 TypeScript/JavaScript 执行时就好像没有问题一样。
这两种文件类型都是由 Microsoft 发明的,所以我有点惊讶它们彼此之间并没有更友好。这不是世界末日,至少我仍然可以使用面向对象编程,我只是想知道是否有其他人经历过这种情况并且可以给我一个简短的解释。
最佳答案
TypeScript 转译器仅检查和转译仅包含以下内容的文件:
CSHTML 文件基本上是为包含 Razor/C# 代码而创建的,当然还有 HTML/JavaScript/CSS。
一些开发人员试图将 Javascript 代码和 CSS 样式表直接添加到 Cshtml 文件中,这不是一个好的做法。
JavaScript 代码和 CSS 样式应该在其自己的文件中。然后在您的 CSHTML 中使用 script
(Javascript) 或 style
(CSS) 标记来引用该文件。
不推荐将 Javascript 代码直接放入您的 View (CSHTML 或只是 HTML),因为它违反了 Unobtrusive JavaScript 的以下原则:
Separation of functionality (the "behavior layer") from a Web page's structure/content and presentation (source Wikipedia)
一些 ASP.Net MVC 开发人员仍然继续将他们的 Javascript 代码直接放入他们的 Razor View 中,因为他们需要将一些来自 View 模型的数据直接传递给 JavaScript 代码。当 Javascript 代码已经在 View 中时,可以很容易地传递数据而不会出现任何复杂情况。但我已经说过这不好 ;-)。
这种破坏 Unobntrusive JavaScript 原则的事情是可以避免的。所有需要由 JavaScript 代码读取的数据都应该使用 HTML 元素中的数据属性来存储,例如
<span id="mySpan" data-t-name="123456">Hello World</span>
然后在您的 TypeScript 代码中使用 jQuery(或 vanilla javascript)来获取您在 CSHTML View 中设置的数据,如下所示:
let tName: number = int.Parse($("#mySpan").data("t-name"));
var instance = new SomeClass(tName);
instance.sayName();
之后,将 TypeScript 生成的 js 文件引用到您的 CSHTML 中。
希望对您有所帮助。
关于.net - .cshtml Razor 文件中的 TypeScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40429693/
我第一次同时处理 ASP.NET、MVC 3、Web 开发。请耐心听我说,因为我知道这个主题已经从不同角度进行了大量讨论。我仍然没有找到我的具体问题的答案:为什么我的应用程序在出现 404 错误时找不
_PageStart.cshtml 与 _AppStart.cshtml 有什么区别?我可以互换使用它们吗? 最佳答案 _AppStart.cshtml 在应用程序第一次启动时执行一次。它是设置全局变
我有一个 DateTime 和 Date 的编辑器模板。 Date 的内容是 DateTime 的简单复制和粘贴。这是糟糕的复制粘贴编码。 对于用[DataType(DataType.Date)]修饰
当我在 IIS 8 中调用 .cshtml 页面时出现以下错误 “/”应用程序中的服务器错误。不提供此类页面。说明:您所请求的页面类型未被提供,因为它已被明确禁止。扩展名“.cshtml”可能不正确。
当我在 IIS 8 中调用 .cshtml 页面时出现以下错误 “/”应用程序中的服务器错误。不提供此类页面。说明:您所请求的页面类型未被提供,因为它已被明确禁止。扩展名“.cshtml”可能不正确。
每次我单击以创建 View 或部分文件时,Visual Studio 都会自动创建一个 _Layout.cshtml 和一个 _ViewStart.cshtml 文件。 我不希望我的项目创建 _Vie
我知道您可以对带有 url 的普通页面使用布局过滤器,但在出现错误时 View 会发生变化,同时保持 url 不变,因此我无法使用基于路径的新布局。任何帮助,将不胜感激。谢谢! 最佳答案 在我的脑海中
我无法在 mvc 3 razor 的 cshtml 文件中使用 RoleEnvironment.CurrentRoleInstance.Id。 RoleEnvironment 的错误表明它在当前上下文
我知道如果那是条蛇它会咬我的。但我不明白为什么它在 _Layout 头文件中有效,但在我需要它的特定索引页面中却无效。我看不到在每个使用 _Layout.cshtml 的页面中都有此代码。 这是 IF
我有一个分为多个区域的 ASP.NET MVC 4 站点。每个区域都有一个Views/Shared/_Layout.cshtml引用公共(public)共享布局的 View 。在通用布局中,我有一个侧
问题 其实有两个相关的问题: 我应该为每个页面创建一个 ViewModel 吗? 如果您在为两个页面(Create.cshtml 和 Edit.cshtml)创建单个 ViewModel 类时没有问题
在 ASP.Net 5 项目中,默认情况下我有一个名为 _ValidationScriptsPartial.cshtml 的文件:
这里有人可以帮助我吗?我有以下代码: @inherits umbraco.MacroEngines.DynamicNodeContext @{ var node = @Model.NodeBy
我希望有两个_Host.cshtml。我的想法是,我有一个具有非常不同的必需 css 和 js 的登录页面,以及一个具有不同必需的 css 和 js 的主/仪表板页面,我不想在单个 _Host 中加载
我尝试在我的 cshtml 页面中添加一个条件标签 var isTrendClicked = false; function trendChart() { $('.sparkline1'
我有一个简单的选择列表项,被插入下拉列表中。 这是 HTML 结果 Options Option1 Option2 基本上我有这个简单的 JavaScript 脚本 $(document).read
按照 MVC 中的教程,你能告诉我在 ASPX 页面中的替代方法吗 在 cshtml 页面中,VS2013 上 MVC 4 中的默认 View 类型。当我尝试上述时,显示的是字面意思。即
我想知道是否有人测试了他们基于 MVC .NET 的 Web 服务的图形用户界面部分。我用过 Watin/Specflow。我对此有两个主要顾虑: 这些测试不仅仅是图形用户界面。它们是系统检查。他们测
我正在为工作更新 Intranet 站点,需要知道如何水平对齐列表项。我知道这是通过 CSS 完成的,但我在弄清楚使它保持水平的错误所在时遇到了一些问题。 _SiteLayout.cshtml
如果特定列包含重复条目,如何清除 HTML 表格的记录?例如,如果我的表中有 2 列 - 姓名和年龄,如果 2 个人具有相同的年龄,则完全删除第二行。 function DeleteDuplicat
我是一名优秀的程序员,十分优秀!