0

私はそこにこのコードを持っています

   var anchor = new HtmlAnchor {HRef = temp, InnerText = this.LinkDescription};
            anchor.Attributes.Add("class", "navActive back");
            anchor.ServerClick += new EventHandler(AnchorServerClick);
            writer.Write("<div id=\"leftnav\"><ul><li>");
            anchor.RenderControl(writer);
            writer.Write("</li></ul></div>");

カスタム Web コントロール内。anchor.RenderControl で nullReference 例外が発生します。なぜですか? 上記をデバッグしましたが、ライターもアンカーもnullではありません。何が起こっているのですか?ありがとう!

編集:デバッグ目的でスタックトレースを追加しています

[NullReferenceException: Object reference not set to an instance of an object.]
System.Web.UI.HtmlControls.HtmlAnchor.GetPostBackOptions() +107
System.Web.UI.HtmlControls.HtmlAnchor.RenderAttributes(HtmlTextWriter writer) +10975634
System.Web.UI.HtmlControls.HtmlControl.RenderBeginTag(HtmlTextWriter writer) +56
System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter writer) +26
CER.Portal.Dashboard.Controls.BackLink.Render(HtmlTextWriter writer) +1151
4

1 に答える 1

1

GetPostBackOptions メソッドのコードを見ると、Page プロパティを現在のページに設定するか、CausesValidation プロパティを false に設定する必要があります。

private PostBackOptions GetPostBackOptions()
{
   PostBackOptions options = new PostBackOptions(this, string.Empty) 
   {
      RequiresJavaScriptProtocol = true
   };
   if (this.CausesValidation && (this.Page.GetValidators(this.ValidationGroup).Count > 0))
   {
      options.PerformValidation = true;
      options.ValidationGroup = this.ValidationGroup;
   }
   return options;
}

RenderControl 呼び出しの前に、anchor.Page = this.Pageまたはanchor.CausesValidation = falseを追加します。

于 2012-10-22T17:05:08.317 に答える