1

我正在尝试在 Umbraco 6.0.6 编辑器中使用 .NET 用户控件宏,但是使用 formview 控件我无法在 page_load 事件中访问其中的控件。

前任:

澳交所:

<%@ 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 编辑器呈现时,如果我在网页或母版页中正常使用控件,它可以正常工作。

有同样结果的人吗?

谢谢

4

1 回答 1

0

我遇到过同样的问题。发生这种情况是因为控件嵌套在编辑器中的不同容器中的方式,因此标准 FindControl() 不会找到它。

我已经在我的所有项目中实现了 Rick Strahl 的递归 FindControl() 辅助方法,这通常可以解决问题:http ://www.west-wind.com/weblog/posts/2006/Apr/09/ASPNET-20- MasterPages 和 FindControl

通常我把它放在一个静态的 ControlHelper 类中并像这样调用它:

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

或者,您可以在宏设置中关闭“在编辑器中渲染控件”选项。99% 的时间我都会关闭它,因为我的大多数宏不需要在编辑器中显示演示文稿。

于 2013-06-19T16:29:09.053 回答