【发布时间】:2019-06-06 20:35:17
【问题描述】:
我正在更新旧的 VB.Net Aspnet MVC(剃须刀页面)网站。正在更新 .NET Framework 版本、Entity Framework、MVC。
到目前为止,它工作得很好,除了几个使用@@ 运算符的页面。我以前看到过,为了逃避 Razor 的 @,在 C# 中。
但是在这种情况下,在 VB.NET 中,它返回一个匿名方法,该方法接受一个对象并返回一个 System.Web.WebPages.HelperResult。
以下代码:
@Code
Dim myString As String
myString = "mystring"
End Code
Double-At : @String.Format("{0}", @@<text>@myString</text>)
<br />
Double-At execution : @String.Format("{0}", (@@<text>Some @myString and then some</text>)(Nothing))
<br />
输出:
Double-At : VB$AnonymousDelegate_0`2[System.Object,System.Web.WebPages.HelperResult]
Double-At execution : Somesome mystring and then some
由于我不太习惯 VB.Net,因此我尝试在 C# 中找到等效的东西,以便我可以玩弄它并更好地理解它,但找不到类似的东西。
在标志处搜索 VB.Net Razor Double 并没有得到任何有意义的答案,我仍然不知道那是什么。
现在,我正在更新的网站因生成的代码无法编译而失败,并且生成的代码来自那些 Double At-Signs 函数。
作为参考,如果有人有想法,生成的代码无法编译,它会失败,因为我在 @@ 中使用的 @ 被拆分为多行,即使它们是一条指令。
例如:
@(Html.Kendo().Window() _
.Name("SomeWindow") _
.Draggable() _
.Modal(True) _
.Title("") _
.Width(300) _
.Content(@@<text>
SomeValue : @LocalizedResources.SomeValue
</text>))
使用以下代码在运行时编译(点击页面时)崩溃:
WriteTo(__razor_template_writer,
#ExternalSource("C:\TestProject\TestPage.vbhtml",141)
#End ExternalSource
##ExternalSource("C:\TestProject\TestPage.vbhtml",141)
LocalizedResources.SomeValue)
#End ExternalSource
WriteTo 函数的第二个参数出现在另一行的事实使编译器吐出一个错误,BC30205 : End of statement expected。
知道@@ 是什么吗?知道它的 C# 等价物是什么吗?甚至建议让我的 Razor 页面生成实际编译的代码?
【问题讨论】:
-
不错的文章。很好的研究。
-
哇,这是两个很棒的回应!作为参考,现在我了解了它的工作原理,并且我有点看到 Kendo mvc 是...... Kendo UI 的一个不必要的包装器,我将所有 Kendo MVC 调用重写为直接的 Javascript kendo 调用。在 Visual Studio 中玩得更好,这样我就避免了使用有问题的模板化 Razor 委托。仍然对为什么它最终会在运行时生成损坏的 VB.Net 代码感到困惑,而它在 .net 4.0 / mvc 3 / razor 1 上正常工作......但最后,这并不重要,因为我更喜欢少Kendo UI 与 Kendo Mvc 的复杂语法。
标签: c# asp.net-mvc vb.net razor