gpt4 book ai didi

.net - 为什么 Razor 声明性 @helper 方法中的 HtmlHelper 实例为 null?

转载 作者:行者123 更新时间:2023-12-03 07:42:50 25 4
gpt4 key购买 nike

使用 MVC 3 RTM 我遇到了一个奇怪的 NullReferenceException:

@helper TestHelperMethod() {
var extra = "class=\"foo\"";
<div @Html.Raw(extra)></div>
}

事实证明,Html(类型为HtmlHelper)为null

我以前从未在常规 View 中见过这个。我开始在 Razor 中尝试声明性辅助方法(到目前为止,它们似乎有点有限),我对在这里看到的内容感到非常困惑。

最佳答案

使用Drew Noakes suggestion ,我已经找到了一种解决方法,目前可以解决这个问题,一旦在新版本的 MVC 中解决了问题,就可以轻松删除该解决方法(也就是说,如果不更改更多内容,则会破坏它:))

目标是能够在 App_Code 文件中的声明性帮助器方法中使用 HtmlHelper,而不会出现 NullReferenceException。为了解决这个问题,我在 App_Code 的所有文件中包含以下内容:

@using System.Web.Mvc;

@functions
{
private static new HtmlHelper<object> Html
{
get { return ((WebViewPage)CurrentPage).Html; }
}

private static UrlHelper Url
{
get { return ((WebViewPage)CurrentPage).Url; }
}
}

这似乎确实有效,因为我现在可以编写以下帮助程序(在同一文件中):

@helper PrintAsRaw(string htmlString)
{
@Html.Raw(htmlString)
}

显然,辅助方法只是一个示例。此解决方案的缺点是必须在 App_Code 中的所有帮助器声明文件中引入 @functions 声明,但确实避免了对帮助器的调用复杂化,因为您可以简单地在 View 中编写:

@MyAppCodeFile.PrintAsRaw("<p>My paragraph</p>")

希望这有帮助...

关于.net - 为什么 Razor 声明性 @helper 方法中的 HtmlHelper 实例为 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5282655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com