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.
버튼 클릭을 기반으로 ASP.NET FormView에서 사용자 정의 객체를 수정하는 방법은 무엇입니까?
사용자 지정 클래스의 인스턴스를 수정하는 FormView가 있습니다. 다양한 폼 컨트롤 (TextBox, DropDownList 등)이 정상적으로 작동합니다. 그러나, 아주 간단한 로직을 기반으로 DataItem의 상태를 수정할 Button을 포함하고 싶습니다. 이 변경을 혼란스럽게 제어 할 수있는 폼 컨트롤은 없습니다.
실제 상황에는 주소 입력 양식이 있습니다. 주소는 "표준"호주 주소 (도로 번호 및 이름, 교외 주 및 우편 번호) 일 수도 있고, 교외 (일부 구체적인 주소 요구 사항이있는 사람들) 이전에 3 개의 주소 라인이있는 "비표준"일 수도 있습니다. 나는 "더 많은 라인을 추가하라"라는 버튼을 원하면 클릭하면 오브젝트가 AddressLines.StandardAustralian
에서 AddressLines.NonStandardAustralian
으로 변경됩니다. 비표준 주소의 경우 "여분의 줄 제거"라고 쓰여있는 다른 단추가있을 것이고 클릭하면 그 과정을 뒤 바꿀 것입니다.
그래서 Button을 추가하고 코드 숨김에서 DataItem의 상태를 수정 해 보았습니다. 하지만 내가 만나는 문제는 FormView의 DataItem이 null/nothing이라는 것입니다. 이 SO question을 읽는 것으로부터, Button의 Click 이벤트가 발생하면 항목이 데이터 바인딩되지 않는다는 것이 문제인 것처럼 보입니다.
그래서, 질문; Button의 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: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>
이
확인
코드가 도움이됩니다. –
FormView 및 DataSource에 대한 버튼 클릭 메서드 및 aspx 소스에 대한 코드 숨김이 추가되었습니다. 유용 할 수있는 다른 코드가 있다면 알려주십시오. – David