gpt4 book ai didi

asp.net-mvc - WriteAttributeTo 方法中的空引用异常

转载 作者:行者123 更新时间:2023-12-04 11:39:03 24 4
gpt4 key购买 nike

以下代码在 str 为 NULL 时给出 NULL 引用错误,但仅在我们的生产服务器上,不在我们的开发或测试服务器上。

<div>
<input value="@Html.Raw(str)" />
</div>

这工作得很好:
<div>
<input value="@str" />
</div>

就像这样:
<div>
Values is: @Html.Raw(str)
</div>

所以这不是@Html.Raw 不能接受 NULL 参数的问题。不过,我不确定在这种情况下它到底返回了什么;但它在一台服务器上与另一台服务器上有所不同。

两者都运行相同版本的 System.Web.Mvc,但我不知道要检查哪些其他 DLL。 System.Web.WebPages 是应该包含崩溃的 MVC 方法的程序集,在两台服务器上是相同的版本。这是 MVC 版本 4; .Net 4.5。

这样的事情怎么可能?错误发生在 WriteAttributeTo 方法中,尽管我什至不知道为什么会在这里调用它,因为它使用标准 HTML 输入标记,而不是 @Html.TextBoxFor 帮助器。

编辑
可能有帮助的一件事是,如果其他人尝试将该代码放在他们自己的 View 中以查看它是否有效或损坏。至少那时我会知道是我的生产环境还是测试环境出现了意外。

这是完整的堆栈跟踪:

at System.Web.WebPages.WebPageExecutingBase.WriteAttributeTo(String pageVirtualPath, TextWriter writer, String name, PositionTagged1
prefix, PositionTagged
1 suffix, AttributeValue[] values) at System.Web.WebPages.WebPageExecutingBase.WriteAttributeTo(TextWriter writer, String name, PositionTagged1 prefix, PositionTagged1 suffix, AttributeValue[] values) at System.Web.WebPages.WebPageExecutingBase.WriteAttribute(String name, PositionTagged1 prefix, PositionTagged1 suffix, AttributeValue[] values) at ASP._Page_Views_AdminSurvey_TopDown_cshtml.Execute() in c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\fdd62ffd\90d151d1\App_Web_xsolwitr.2.cs:line 0 at System.Web.WebPages.WebPageBase.ExecutePageHierarchy() at System.Web.Mvc.WebViewPage.ExecutePageHierarchy() at System.Web.WebPages.StartPage.ExecutePageHierarchy() at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) at System.Web.Mvc.ControllerActionInvoker.<>c_DisplayClass1a.b_17() at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func1 continuation) at
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter
filter, ResultExecutingContext preContext, Func
1 continuation) at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c_DisplayClass25.b_22(IAsyncResult asyncResult) at System.Web.Mvc.Controller.<>c_DisplayClass1d.b_18(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncResultWrapper.<>c_DisplayClass4.b_3(IAsyncResult ar) at System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncResultWrapper.<>c_DisplayClass4.b_3(IAsyncResult ar) at System.Web.Mvc.MvcHandler.<>c_DisplayClass6.<>c_DisplayClassb.b_4(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncResultWrapper.<>c_DisplayClass4.b__3(IAsyncResult ar) at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

最佳答案

多亏了 nemesv 和 Dave A 的帮助,我才能够找到问题所在。这是一个两部分的答案。

1) 异常的原因似乎是 中存在错误。 Razor 实现合并Html.Raw 内HTML 属性。当 Razor 查看引擎 遇到 中的文本HTML 属性,它使用 WebPageExecutingBase.WriteAttributeTo()方法,即使它只是在普通 内HTML .以前我的印象是 Razor 查看引擎 仅处理服务器端命令(@ 符号之后的代码)。虽然Html.RawWriteAttibuteTo()允许空值,需要特殊处理来处理组合 2,如果有空值,该代码将崩溃。

2) 这已在 的最新版本中更新/修复。 System.Web.WebPages.dll ,这就引出了答案的第二部分。项目引用版本 2.0.20505.0 那个dll,它被部署在项目的bin文件夹中。此版本包含错误。

但即使它被项目引用,并且在 bin 文件夹中,测试服务器也没有使用该版本的 DLL 进行程序集绑定(bind)。 fuslog.exe显示它正在绑定(bind)一个在 中注册的程序集。广汽 相反,它是 版本 2.0.20710.0 . QA 服务器在 GAC 中有这个,而生产服务器没有。我不知道 广汽 将覆盖 bin 文件夹中的 dll。

我已更新我的项目以引用最新的 ASPNetMVC 包,其中包括 版本 2.0.30506.0 网页 dll .

关于asp.net-mvc - WriteAttributeTo 方法中的空引用异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19599728/

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