C# Razor helper中出现奇怪的NullReferenceException异常
我在C#Web表单应用程序中使用Razor助手 调用时,以下代码编译并呈现A-OK:C# Razor helper中出现奇怪的NullReferenceException异常,c#,razor,webforms,razor-2,C#,Razor,Webforms,Razor 2,我在C#Web表单应用程序中使用Razor助手 调用时,以下代码编译并呈现A-OK: @helper MemberListItem(string firstname, string lastname, string avatarUrl) { <li> @firstname @lastname @avatarUrl </li> } @helper MemberListItem(string firstname, string
@helper MemberListItem(string firstname, string lastname, string avatarUrl)
{
<li>
@firstname @lastname
@avatarUrl
</li>
}
@helper MemberListItem(string firstname, string lastname, string avatarUrl)
{
<li>
@firstname @lastname
<img src="@avatarUrl"/>
</li>
}
请记住,除了帮助器中的@avatarUrl
位置之外,我没有改变任何东西
如何显示图像
更新1:
我还尝试将我的img
代码包装在
中(无效):
这不会(NullReferenceException):
编译代码(来自c:\Windows中的临时ASP.NET文件):
#pragma checksum“C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_code\RazorHelpers\IdentityProvider.cshtml”{ff1816ec-aa5e-4d10-87f7-6F49638333460}“46B0FEE2042706017F4AE53D4EA612F3E73EDF8B”
//------------------------------------------------------------------------------
//
//这段代码是由一个工具生成的。
//运行时版本:4.0.30319.18052
//
//对此文件的更改可能会导致不正确的行为,如果
//重新生成代码。
//
//------------------------------------------------------------------------------
命名空间ASP.RazorHelpers{
使用制度;
使用System.Collections.Generic;
使用System.IO;
使用System.Linq;
Net系统;
使用System.Web;
使用System.Web.Helpers;
使用System.Web.Security;
使用System.Web.UI;
使用System.Web.Web网页;
使用System.Web.WebPages.Html;
#第1行“C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml”
使用Aqha.DatabaseHelpers;
#行默认值
#隐藏线
#第2行“C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml”
使用Aqha.RazorExtensions;
#行默认值
#隐藏线
#第3行“C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml”
使用DevExpress.Utils.Drawing.Helpers;
#行默认值
#隐藏线
公共类标识提供程序:System.Web.WebPages.HelperPage{
#隐藏线
#第5行“C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml”
public static System.Web.WebPages.HelperResult ListGroupGrid(IEnumerable提供程序){
#行默认值
#隐藏线
返回新的System.Web.WebPages.HelperResult(\uuu razor\uHelper\uWriter=>{
#第5行“C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml”
#行默认值
#隐藏线
BeginContext(uu razor\u helper\u writer,“~/App\u Code/razor helpers/IdentityProvider.cshtml”,202,11,true);
WriteLiteralTo(\r\n);
EndContext(uu razor\u helper\u writer,“~/App\u Code/razor helpers/IdentityProvider.cshtml”,202,11,true);
#第7行“C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml”
#行默认值
#隐藏线
#第7行“C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml”
foreach(提供程序中的var提供程序){
#行默认值
#隐藏线
BeginContext(uu razor\u helper\u writer,“~/App\u Code/razor helpers/IdentityProvider.cshtml”,272,13,false);
#第8行“C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml”
WriteTo(\uuuRazor\uHelper\uWriter,provider.Name);
#行默认值
#隐藏线
EndContext(uu razor\u helper\u writer,“~/App\u Code/razor helpers/IdentityProvider.cshtml”,272,13,false);
#第8行“C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml”
#行默认值
#隐藏线
BeginContext(uu razor\u helper\u writer,“~/App\u Code/razor helpers/IdentityProvider.cshtml”,287,16,true);
WriteEletrato(\uuuRazor\uHelper\uWriter,”(provider.IconUrl
#行默认值
#隐藏线
,309),假)
);
BeginContext(uu razor\u helper\u writer,“~/App\u Code/razor helpers/IdentityProvider.cshtml”,327,4,true);
WriteLiteralTo(\uuuRazor\uHelper\uWriter,“/>\r\n”);
EndContext(uu razor\u helper\u writer,“~/App\u Code/RazorHelpers/IdentityProvider.cshtml”,327,4,true);
#第10行“C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml”
}
#行默认值
#隐藏线
BeginContext(uu razor\u helper\u writer,“~/App\u Code/razor helpers/IdentityProvider.cshtml”,342,12,true);
WriteLiteralTo(\r\n);
EndContext(uu razor\u helper\u writer,“~/App\u Code/RazorHelpers/IdentityProvider.cshtml”,342,12,true);
#第12行“C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml”
#行默认值
#隐藏线
});
#第12行“C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml”
}
#行默认值
#隐藏线
公共标识提供程序(){
}
受保护的静态ASP.global\U asax应用程序实例{
得到{
返回((ASP.global_asax)(Context.ApplicationInstance));
}
}
}
}
更新5:
我做了更多的测试。为了尽可能清楚地说明这个问题,我删除了所有的输入参数和额外的标记
考虑以下三个助手:
#pragma checksum "C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "46B0FEE2042706017F4AE53D4EA612F3E73EDF8B"
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.18052
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace ASP.RazorHelpers {
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Helpers;
using System.Web.Security;
using System.Web.UI;
using System.Web.WebPages;
using System.Web.WebPages.Html;
#line 1 "C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml"
using Aqha.DatabaseHelpers;
#line default
#line hidden
#line 2 "C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml"
using Aqha.RazorExtensions;
#line default
#line hidden
#line 3 "C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml"
using DevExpress.Utils.Drawing.Helpers;
#line default
#line hidden
public class IdentityProvider : System.Web.WebPages.HelperPage {
#line hidden
#line 5 "C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml"
public static System.Web.WebPages.HelperResult ListGroupGrid(IEnumerable<IdentityProviderData.ExternalIdentityProvider> providers) {
#line default
#line hidden
return new System.Web.WebPages.HelperResult(__razor_helper_writer => {
#line 5 "C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml"
#line default
#line hidden
BeginContext(__razor_helper_writer, "~/App_Code/RazorHelpers/IdentityProvider.cshtml", 202, 11, true);
WriteLiteralTo(__razor_helper_writer, " <div>\r\n");
EndContext(__razor_helper_writer, "~/App_Code/RazorHelpers/IdentityProvider.cshtml", 202, 11, true);
#line 7 "C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml"
#line default
#line hidden
#line 7 "C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml"
foreach(var provider in providers){
#line default
#line hidden
BeginContext(__razor_helper_writer, "~/App_Code/RazorHelpers/IdentityProvider.cshtml", 272, 13, false);
#line 8 "C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml"
WriteTo(__razor_helper_writer, provider.Name);
#line default
#line hidden
EndContext(__razor_helper_writer, "~/App_Code/RazorHelpers/IdentityProvider.cshtml", 272, 13, false);
#line 8 "C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml"
#line default
#line hidden
BeginContext(__razor_helper_writer, "~/App_Code/RazorHelpers/IdentityProvider.cshtml", 287, 16, true);
WriteLiteralTo(__razor_helper_writer, " <img");
EndContext(__razor_helper_writer, "~/App_Code/RazorHelpers/IdentityProvider.cshtml", 287, 16, true);
WriteAttributeTo(__razor_helper_writer, "src", Tuple.Create(" src=\"", 303), Tuple.Create("\"", 326)
#line 9 "C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml"
, Tuple.Create(Tuple.Create("", 309), Tuple.Create<System.Object, System.Int32>(provider.IconUrl
#line default
#line hidden
, 309), false)
);
BeginContext(__razor_helper_writer, "~/App_Code/RazorHelpers/IdentityProvider.cshtml", 327, 4, true);
WriteLiteralTo(__razor_helper_writer, "/>\r\n");
EndContext(__razor_helper_writer, "~/App_Code/RazorHelpers/IdentityProvider.cshtml", 327, 4, true);
#line 10 "C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml"
}
#line default
#line hidden
BeginContext(__razor_helper_writer, "~/App_Code/RazorHelpers/IdentityProvider.cshtml", 342, 12, true);
WriteLiteralTo(__razor_helper_writer, " </div>\r\n");
EndContext(__razor_helper_writer, "~/App_Code/RazorHelpers/IdentityProvider.cshtml", 342, 12, true);
#line 12 "C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml"
#line default
#line hidden
});
#line 12 "C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml"
}
#line default
#line hidden
public IdentityProvider() {
}
protected static ASP.global_asax ApplicationInstance {
get {
return ((ASP.global_asax)(Context.ApplicationInstance));
}
}
}
}
@helper BaseCase(){
}
@helper VariableBaseCase(){
var src=“/Resources/Images/Placeholders/generic user image.jpg”;
来源是@src
}
@辅助变量(){
var src=“/Resources/Images/Placeholders/generic user image.jpg”;
来源是@src
}
当我从ASPX调用前两个助手时,它们毫无例外地显示输出(图像正常显示):
@helper BaseCase() {
<img src="/Resources/Images/Placeholders/generic-user-image.jpg"/>
}
@helper VariableBaseCase() {
var src = "/Resources/Images/Placeholders/generic-user-image.jpg";
<img src="/Resources/Images/Placeholders/generic-user-image.jpg"/>
<text>the source is @src</text>
}
@helper Variable() {
var src = "/Resources/Images/Placeholders/generic-user-image.jpg";
<img src="@src"/>
<text>the source is @src</text>
}
当我调用最后一个助手时,我得到的错误与我一直得到的错误相同
<%= RazorHelpers.ImageTest.BaseCase().ToString() %>
<%= RazorHelpers.ImageTest.VariableBaseCase().ToString() %>
我希望现在我正确地相信这是一条相对的道路
<%= @HelperFile.Helper(parameters).ToString() %>
<img src="/Resources/Images/Placeholders/generic-user-image.jpg"/>
<img src="~/Resources/Images/Placeholders/generic-user-image.jpg"/>
<img src="@avatarUrl"/>
<img src="~@avatarUrl"/>
@helper ListGroupGrid(IEnumerable<ExternalIdentityProvider> providers) {
<div>
@foreach(var provider in providers){
@provider.Name
<img src="@provider.IconUrl"/>
}
</div>
}
#pragma checksum "C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "46B0FEE2042706017F4AE53D4EA612F3E73EDF8B"
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.18052
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace ASP.RazorHelpers {
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Helpers;
using System.Web.Security;
using System.Web.UI;
using System.Web.WebPages;
using System.Web.WebPages.Html;
#line 1 "C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml"
using Aqha.DatabaseHelpers;
#line default
#line hidden
#line 2 "C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml"
using Aqha.RazorExtensions;
#line default
#line hidden
#line 3 "C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml"
using DevExpress.Utils.Drawing.Helpers;
#line default
#line hidden
public class IdentityProvider : System.Web.WebPages.HelperPage {
#line hidden
#line 5 "C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml"
public static System.Web.WebPages.HelperResult ListGroupGrid(IEnumerable<IdentityProviderData.ExternalIdentityProvider> providers) {
#line default
#line hidden
return new System.Web.WebPages.HelperResult(__razor_helper_writer => {
#line 5 "C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml"
#line default
#line hidden
BeginContext(__razor_helper_writer, "~/App_Code/RazorHelpers/IdentityProvider.cshtml", 202, 11, true);
WriteLiteralTo(__razor_helper_writer, " <div>\r\n");
EndContext(__razor_helper_writer, "~/App_Code/RazorHelpers/IdentityProvider.cshtml", 202, 11, true);
#line 7 "C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml"
#line default
#line hidden
#line 7 "C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml"
foreach(var provider in providers){
#line default
#line hidden
BeginContext(__razor_helper_writer, "~/App_Code/RazorHelpers/IdentityProvider.cshtml", 272, 13, false);
#line 8 "C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml"
WriteTo(__razor_helper_writer, provider.Name);
#line default
#line hidden
EndContext(__razor_helper_writer, "~/App_Code/RazorHelpers/IdentityProvider.cshtml", 272, 13, false);
#line 8 "C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml"
#line default
#line hidden
BeginContext(__razor_helper_writer, "~/App_Code/RazorHelpers/IdentityProvider.cshtml", 287, 16, true);
WriteLiteralTo(__razor_helper_writer, " <img");
EndContext(__razor_helper_writer, "~/App_Code/RazorHelpers/IdentityProvider.cshtml", 287, 16, true);
WriteAttributeTo(__razor_helper_writer, "src", Tuple.Create(" src=\"", 303), Tuple.Create("\"", 326)
#line 9 "C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml"
, Tuple.Create(Tuple.Create("", 309), Tuple.Create<System.Object, System.Int32>(provider.IconUrl
#line default
#line hidden
, 309), false)
);
BeginContext(__razor_helper_writer, "~/App_Code/RazorHelpers/IdentityProvider.cshtml", 327, 4, true);
WriteLiteralTo(__razor_helper_writer, "/>\r\n");
EndContext(__razor_helper_writer, "~/App_Code/RazorHelpers/IdentityProvider.cshtml", 327, 4, true);
#line 10 "C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml"
}
#line default
#line hidden
BeginContext(__razor_helper_writer, "~/App_Code/RazorHelpers/IdentityProvider.cshtml", 342, 12, true);
WriteLiteralTo(__razor_helper_writer, " </div>\r\n");
EndContext(__razor_helper_writer, "~/App_Code/RazorHelpers/IdentityProvider.cshtml", 342, 12, true);
#line 12 "C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml"
#line default
#line hidden
});
#line 12 "C:\Users\Public\Documents\VisualStudioProjects\OnlineStable\Aqha\App_Code\RazorHelpers\IdentityProvider.cshtml"
}
#line default
#line hidden
public IdentityProvider() {
}
protected static ASP.global_asax ApplicationInstance {
get {
return ((ASP.global_asax)(Context.ApplicationInstance));
}
}
}
}
@helper BaseCase() {
<img src="/Resources/Images/Placeholders/generic-user-image.jpg"/>
}
@helper VariableBaseCase() {
var src = "/Resources/Images/Placeholders/generic-user-image.jpg";
<img src="/Resources/Images/Placeholders/generic-user-image.jpg"/>
<text>the source is @src</text>
}
@helper Variable() {
var src = "/Resources/Images/Placeholders/generic-user-image.jpg";
<img src="@src"/>
<text>the source is @src</text>
}
<%= RazorHelpers.ImageTest.BaseCase().ToString() %>
<%= RazorHelpers.ImageTest.VariableBaseCase().ToString() %>
<%= RazorHelpers.ImageTest.Variable().ToString() %>
@helper MemberListItem(string firstname, string lastname, string avatarUrl)
{
<li>
@(firstname) @(lastname)
<img src="@(avatarUrl)" />
</li>
}
<input name="ItemUID" type="hidden" value="@ItemUID" />
<input name="ItemUID" type="hidden" @("value=")"@ItemUID" />
string attributeValue= "some value";
string attributeExpression= "attributeName=" + attributeValue;
<div class="" id="" @attributeExpression></div>