1

Umbraco 6.0.6 エディターで .NET ユーザー コントロール マクロを使用しようとしていますが、フォームビュー コントロールを使用すると、page_load イベントで内部のコントロールにアクセスできません。

元:

ASCX:

<%@ Control Language="VB" AutoEventWireup="false" CodeFile="teste.ascx.vb" Inherits="usercontrols_teste" %>
<asp:FormView ID="FormView1" runat="server" DefaultMode="Insert">
    <InsertItemTemplate>
        <asp:TextBox ID="txt_name" runat="server"></asp:TextBox>
    </InsertItemTemplate>
</asp:FormView>

コードファイル:

Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    FormView1.DefaultMode = FormViewMode.Insert
    CType(FormView1.FindControl("txt_name"), TextBox).Text = "name"
End Sub

マスターページ テンプレート:

<form id="form1" runat="server">    
   <umbraco:Item ID="Item1" field="conteudoPagina" runat="server"></umbraco:Item> 
</form>

結果は、「オブジェクトのインスタンスに設定されていないオブジェクト参照」です。行: CType(FormView1.FindControl("txt_name"), TextBox).Text = "name"

これは、コントロールが umbraco エディターからレンダリングされた場合にのみ発生します。コントロールを Web ページまたはマスターページで通常どおり使用すると、正常に動作します。

同じ結果になった人いますか?

ありがとう

4

1 に答える 1

0

私はこの同じ問題に遭遇しました。これは、コントロールがエディター内の別のコンテナーにネストされているために発生するため、標準の FindControl() はそれを見つけられません。

すべてのプロジェクトで Rick Strahl の再帰的な FindControl() ヘルパー メソッドを実装しましたが、通常はこれで問題が解決します。 MasterPages-and-FindControl

通常、静的な ControlHelper クラスに入れて、次のように呼び出します。

((TextBox)ControlHelper.FindControlRecursive(this, "txt_name")).Text = "name";

必要に応じて、マクロ設定の [エディターでコントロールをレンダリング] オプションをオフにすることができます。私のマクロのほとんどは、プレゼンテーションをエディターに表示する必要がないため、99% の確率でこれをオフにしています。

于 2013-06-19T16:29:09.053 に答える