c# - 如何在我的 EditItemTemplate 中获取控件?

标签 c# asp.net detailsview

我有一个绑定(bind)到 EntityDataSourceDetailsView 并试图从 EditItemTemplates< 中的 TextBoxes 获取值.

这是我的代码:

 <asp:DetailsView ID="DetailsView1" DataKeyNames="Name" runat="server" AutoGenerateRows="False"
OnDataBound="DetailsView_DataBound" DataSourceID="eds2" BorderWidth="0"
OnModeChanging="OnModeChanging" AutoGenerateEditButton="true"
OnItemUpdated="DetailsView_OnItemUpdated" OnItemUpdating="DetailsView_OnItemUpdating"
EmptyDataText="N/A" OnDataBinding="DetailsView_OnDataBinding" CellPadding="0"
CellSpacing="7" GridLines="None" CssClass="Center">
<Fields>
<asp:TemplateField HeaderText="Name">
    <EditItemTemplate>
    <asp:TextBox ID="txtName" runat="server" Text='<%# Bind("Name") %>'></asp:TextBox>
    </EditItemTemplate>
    <ItemTemplate>
    <asp:Label ID="lblName" runat="server" Text='<%# Bind("Name") %>'></asp:Label>
    </ItemTemplate>
</asp:TemplateField>
 <Fields>
</asp:DetailsView>

以及背后的代码:

protected void OnModeChanging(object sender, DetailsViewModeEventArgs e)
{ 
    foreach (DetailsViewRow row in DetailsView1.Rows)
    {
        if (row.RowType != DataControlRowType.DataRow) continue;
        foreach (DataControlFieldCell cell in row.Cells)
        {
            var textbox = cell.FindControl("txtName");
            var textbox2 = row.FindControl("txtName");
        }
    }
}

textboxtextbox2 始终为空。我究竟做错了什么?如何获取文本框或其中的值?

最佳答案

您在编辑模板中声明了这些文本框。这些只会在您的模式设置为编辑时显示。我猜当 ModeChanging 事件被触发时这还没有发生。

将您的代码放入 ModeChanged 事件中,并检查您是否正在编辑。

void DetailsView1_ModeChanged(object sender, EventArgs e)
{
    if (DetailsView1.CurrentMode != DetailsViewMode.Edit)
        return;

    foreach (DetailsViewRow row in DetailsView1.Rows)
    {
       var textbox = row.FindControl("txtName");
    }
}

关于c# - 如何在我的 EditItemTemplate 中获取控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8478318/

相关文章:

c# - Visual Studio Runner 中的 xUnit 错误消息

jquery - 为什么回发时文本框的值变为空?

c# - 进行 GZipStream 压缩时抛出 System.OutofMemoryException

c# - 为什么我的 FontFamily 是 "Arial"?

c# - 无法将类型为 'System.Linq.Expressions.MethodCallExpression' 的对象转换为类型 'System.Linq.Expressions.LambdaExpression'

c# - IIS 7.5 只显示目录列表或 403 而不是 ASP.NET 应用程序

asp.net - 从 ASP.net 中运行的 Web 引用客户端获取 RAW Soap 数据

objective-c - 核心数据 : Automatically select next table row when record deleted

javascript - 使用 javascript 隐藏详细信息 View 字段

python - “AnonymousUser”对象不可迭代 - 匿名和经过身份验证的用户访问 View