NB. I am going to be away until Tuesday next week. So all help is appreciated but I will be unable to comment/respond until then.
我有一个修改自定义类的实例的 FormView。各种表单控件(TextBox、DropDownList 等)工作正常。但是,我想包含一个 Button,它将根据一些非常简单的逻辑修改 DataItem 的状态。没有表单控件可以以一种不混淆的方式控制这种变化。
实际情况是我有一个输入地址的表格。地址可能是“标准”澳大利亚地址(街道编号和名称、郊区州和邮政编码),也可能是“非标准”,这意味着它在郊区之前有 3 个地址行(适用于有更具体地址要求的人)。我想要一个按钮,上面写着“添加更多行”,单击它会将对象从 is 更改AddressLines.StandardAustralian
为AddressLines.NonStandardAustralian
. 对于非标准地址,将有另一个按钮显示“删除多余的行”,单击该按钮将反转该过程。
所以我尝试在代码隐藏中添加一个 Button 并修改 DataItem 的状态。但我遇到的问题是 FormView 的 DataItem 为空/无。从阅读这个SO question看来,问题似乎是当 Button 的 Click 事件被触发时,该项目没有数据绑定。
所以,问题;是否可以在按钮的 Click 事件期间获取 FormView 的 DataItem?如果不是:我有哪些实施方案?
提前致谢。
代码背后:
Private ReadOnly Property addressView() As AddressView
Get
Return CType(FormView1.DataItem, AddressView) ' <-- But DataItem is Nothing when called from lbMakeNonStd_Click
End Get
End Property
Protected Sub lbMakeNonStd_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lbMakeNonStd.Click
If addressView IsNot Nothing Then
Select Case addressView.NonStd
Case AddressLines.StandardAustralian
addressView.NonStd = AddressLines.NonStandardAustralian
Case AddressLines.NonStandardAustralian
addressView.NonStd = AddressLines.StandardAustralian
Case Else
' Other cases ignored, shouldn't change address lines
End Select
End If
End Sub
ASP:
<asp:FormView ID="FormView1" runat="server" DataKeyNames="IDNO, AddressType" DataSourceID="ObjectDataSource1" EnableViewState="true" >
<ItemTemplate>
...
</ItemTemplate>
<EditItemTemplate>
<fieldset>
<legend>Address</legend>
<asp:UpdatePanel ID="upAddressFields" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger controlid="txtPostcode" eventname="TextChanged" />
</Triggers>
<ContentTemplate>
<asp:Table ID="tblForm" runat="server">
<asp:TableRow ID="trName" runat="server">
<asp:TableHeaderCell ID="TableCell1" runat="server">
Name
</asp:TableHeaderCell>
<asp:TableCell ID="TableCell2" runat="server">
<asp:TextBox ID="tbName" runat="server" Text='<%# Bind("AlternateName") %>' MaxLength="30"></asp:TextBox>
</asp:TableCell>
</asp:TableRow>
<asp:TableRow ID="TableRow2" runat="server" Cs>
<asp:TableHeaderCell ID="TableCell3" runat="server">
Number and Street
</asp:TableHeaderCell>
<asp:TableCell ID="TableCell4" runat="server">
<asp:TextBox ID="tbLine1" runat="server" Text='<%# Bind("Line1") %>' MaxLength="30"></asp:TextBox>
<asp:PlaceHolder ID="phMakeNonStdButton" runat="server">(<asp:LinkButton ID="lbMakeNonStd" runat="server" Text="Add more lines..." />)</asp:PlaceHolder>
</asp:TableCell>
</asp:TableRow>
<asp:TableRow ID="trLine2" runat="server" CssClass="tablerowbg_light">
<asp:TableHeaderCell ID="TableCell5" runat="server">
Line 2
</asp:TableHeaderCell>
<asp:TableCell ID="TableCell6" runat="server">
<asp:TextBox ID="tbLine2" runat="server" Text='<%# Bind("Line2") %>' MaxLength="30"></asp:TextBox>
<br /><asp:LinkButton ID="lbMakeStd" runat="server" Text="Use fewer lines..." />
</asp:TableCell>
</asp:TableRow>
</asp:Table>
</ContentTemplate>
</asp:UpdatePanel>
<asp:LinkButton ID="lbUpdate" runat="server" CommandName="Update" ValidationGroup="ResidentialAddress" Font-Bold="true">Save Changes</asp:LinkButton> |
<asp:LinkButton ID="lbCancel" runat="server" CommandName="Cancel" CausesValidation="false">Cancel</asp:LinkButton>
</EditItemTemplate>