gpt4 book ai didi

asp.net - 在 FormView 中,如何更改 ItemTemplate 中 Label 的属性?

转载 作者:行者123 更新时间:2023-12-04 23:54:13 25 4
gpt4 key购买 nike

在 ASP.NET 中,我有一个绑定(bind)到 ObjectDataSource 的 FormView。 FormView 有一个带有删除按钮的 ItemTemplate 和一个标签。我正在处理 FormView 的 OnItemDeleted 事件,以检测我的业务类是否在删除时抛出异常。如果检测到异常,我会将标签的文本更改为异常消息的内容。

好吧,它只是行不通。

我检测到异常正常,但标签的文本从未更改。当页面重新加载时,默认文本保持不变。在分配新文本后,我还尝试用 DataBind() 重新绑定(bind) FormView,但它也不起作用。

为了跟踪问题,我拼命尝试将标签从 FormView 中取出,它工作正常。

我做错了什么?

ASPX 页面:

<asp:ObjectDataSource ID="MyObjectDataSource" 
TypeName="MyScopeRepository"
SelectMethod="GetById"
DeleteMethod="Delete"
runat="server">

<SelectParameters>
<%-- The id param here is from a DropDownList, not included in the example for clarity. --%>
<asp:ControlParameter Name="id" Type="Int32" ControlID="MyDropDownList" PropertyName="SelectedValue" />
</SelectParameters>
<DeleteParameters>
<asp:Parameter Name="id" Type="Int32" />
</DeleteParameters>
</asp:ObjectDataSource>

<asp:FormView ID="MyFormView" DataSourceID="MyObjectDataSource"
RenderOuterTable="false"
DataKeyNames="Id"
OnItemDeleted="MyFormViewItemDeleted"
runat="server">

<ItemTemplate>
<asp:Button CssClass="Button Small" Text="Delete" CommandName="Delete" runat="server" /><br />
<asp:Label ID="ErrorLabel" Text="Default text" runat="server" />
</ItemTemplate>
</asp:FormView>

代码隐藏:

protected void MyFormViewItemDeleted(object sender, FormViewDeletedEventArgs e)
{
if (e.Exception != null && e.Exception.InnerException is RepositoryException)
{
Label errorLabel = (Label)MyFormView.FindControl("ErrorLabel");
errorLabel.Text = e.Exception.InnerException.Message;
e.ExceptionHandled = true;

// I also tried this to no avail.
//MyFormView.DataBind();
}
}

非常感谢!

编辑:我检查了单击“删除”按钮时 FormView 触发的所有事件,这是我得到的:

  1. 初始化
  2. OnItemCreated
  3. 加载
  4. OnItemCommand
  5. OnItemDeleting
  6. OnItemDeleted
  7. OnItemCreated
  8. OnDataBound
  9. OnPreRender
  10. 卸载

所以我们可以看到 OnItemCreated 被触发了两次,第二次是在 OnItemDeleted 之后,我想这意味着我所做的任何更改都会被覆盖。现在我该如何处理?

最佳答案

这是可行的解决方案(您可能想要改进它):

<asp:FormView ID="FormView1" runat="server" DataSourceID="ObjectDataSource1" 
AllowPaging="true" OnItemDeleted="FormView1_ItemDeleted" ondatabound="FormView1_DataBound" >
<ItemTemplate>
Key:
<asp:Label ID="KeyLabel" runat="server" Text='<%# Bind("Key") %>' />
<br />
Value:
<asp:Label ID="ValueLabel" runat="server" Text='<%# Bind("Value") %>' />
<br />
<asp:Button ID="DeleteButton" runat="server" CausesValidation="False" CommandName="Delete"
Text="Delete" />
<hr />
<asp:Label ID="Label1" runat="server" Text="does not work"></asp:Label>
</ItemTemplate>
</asp:FormView>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetList"
DeleteMethod="Delete" TypeName="MyProject.Repository">
<DeleteParameters>
<asp:Parameter Name="key" Type="Int32" />
</DeleteParameters>
</asp:ObjectDataSource>

代码隐藏:

public string MyProperty { get; set; }
protected void FormView1_DataBound(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(MyProperty))
{
Label l = FormView1.FindControl("Label1") as Label;
l.Text = "it works. " + MyProperty;
MyProperty = null;
}
}

protected void FormView1_ItemDeleted(object sender, FormViewDeletedEventArgs e)
{
if (e.Exception != null)
{
MyProperty = e.Exception.Message;
e.ExceptionHandled = true;
}
}

关于asp.net - 在 FormView 中,如何更改 ItemTemplate 中 Label 的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4392913/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com