0

内のLoginView1コントロールにアクセスする方法は?Multiview1View2

マルチビュー内のView 2のloggedInテンプレートにテキストボックスとドロップダウンリストがあり、コントロールを取得してデータベースからテキストにバインドする必要があります。

私は試してみました:

((TextBox)this.LoginView1.FindControl("custEmail")).Text = dr.GetValue(1).ToString();
((TextBox)LoginView1.FindControl("custEmail")).Text = dr.GetValue(1).ToString();
((TextBox)LoginView1.FindControl("custEmail")).Text = "xxxx";

「オブジェクト参照がオブジェクトのインスタンスに設定されていません」を返します。

マークアップ コード

<asp:View ID="View2" runat="server" OnActivate="login_Click">
                <asp:Label ID="tprice" runat="server" /><br />
                <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
                    <ContentTemplate>
                        <asp:LoginView ID="LoginView1" runat="server" ViewStateMode="Disabled">
                            <AnonymousTemplate>
                                Please login to continue.<br />
                                <asp:Login ID="Login1" runat="server" ViewStateMode="Disabled" RenderOuterTable="false">
                                    <LayoutTemplate>
                                        <fieldset>
                                            <legend>Log in Form</legend>
                                            <ul>
                                                <li>
                                                    <asp:Label ID="Label2" runat="server" AssociatedControlID="UserName">User name</asp:Label>
                                                    <asp:TextBox runat="server" ID="UserName" />
                                                    <asp:RequiredFieldValidator runat="server" ControlToValidate="UserName"
                                                        CssClass="field-validation-error" ErrorMessage="The user name field is required." />
                                                </li>
                                                <li>
                                                    <asp:Label ID="Label4" runat="server" AssociatedControlID="Password">Password</asp:Label>
                                                    <asp:TextBox runat="server" ID="Password" TextMode="Password" />
                                                    <asp:RequiredFieldValidator runat="server" ControlToValidate="Password"
                                                        CssClass="field-validation-error" ErrorMessage="The password field is required." />
                                                </li>
                                            </ul>
                                            <asp:Button ID="login" runat="server" CommandName="Login" OnCommand="login_Click"
                                                Text="Log in"
                                                CssClass="btn btn-info" />
                                        </fieldset>
                                        <asp:Label runat="server" ID="FailureText" class="validation-summary-errors" />
                                    </LayoutTemplate>
                                </asp:Login>
                                or
                        <a id="registerLink" runat="server" href="~/Account/Register">Register</a>&nbsp;
                        to continue
                            </AnonymousTemplate>
                            <LoggedInTemplate>
                                <table class="custable">
                                    <tr>
                                        <td>
                                            <asp:Label ID="Label5" AssociatedControlID="title" runat="server" Text="Title : " />
                                        </td>
                                        <td>
                                            <asp:DropDownList ID="title" runat="server">
                                                <asp:ListItem Value="0">Select One...</asp:ListItem>
                                                <asp:ListItem Value="Mr">Mr</asp:ListItem>
                                                <asp:ListItem Value="Mrs">Mrs</asp:ListItem>
                                                <asp:ListItem Value="Miss">Miss</asp:ListItem>
                                                <asp:ListItem Value="Ms">Ms</asp:ListItem>
                                                <asp:ListItem Value="Doctor">Doctor</asp:ListItem>
                                            </asp:DropDownList>
                                        </td>
                                        <td>
                                            <asp:CompareValidator ID="CompareValidator1" runat="server"
                                                ControlToValidate="title" ValueToCompare="0" Operator="NotEqual"
                                                Text="Please select the title." CssClass="field-validation-error"
                                                SetFocusOnError="true" ValidationGroup="vg1" />
                                        </td>
                                    </tr>
                                    <tr>
                                        <td>
                                            <asp:Label ID="Label6" AssociatedControlID="name" runat="server" Text="Full Name As Per IC : " />
                                        </td>
                                        <td>
                                            <asp:TextBox ID="name" runat="server" />
                                        </td>
                                        <td>
                                            <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="name"
                                                CssClass="field-validation-error" Text="*Required"
                                                SetFocusOnError="true" ValidationGroup="vg1" />
                                        </td>
                                    </tr>
                                    <tr>
                                        <td>
                                            <asp:Label ID="Label7" AssociatedControlID="custEmail" runat="server" Text="Email : " />
                                        </td>
                                        <td>
                                            <asp:TextBox ID="custEmail" runat="server" TextMode="Email" />
                                        </td>
                                        <td>
                                            <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="custEmail"
                                                CssClass="field-validation-error" Text="*"
                                                SetFocusOnError="true" ValidationGroup="vg1" />
                                        </td>
                                    </tr>
                                    <tr>
                                        <td>
                                            <asp:Label ID="Label8" AssociatedControlID="email2" runat="server" Text="Confirm Email : " />
                                        </td>
                                        <td>
                                            <asp:TextBox ID="email2" runat="server" TextMode="Email" />
                                        </td>
                                        <td>
                                            <asp:CompareValidator ID="CompareValidator2" ControlToCompare="email2" ControlToValidate="custEmail"
                                                runat="server"
                                                Operator="Equal" Type="String" Text="Please enter same Email." CssClass="field-validation-error"
                                                ValidationGroup="vg1" />
                                        </td>
                                    </tr>
                                    <tr>
                                        <td>
                                            <asp:Label ID="Label9" AssociatedControlID="icPassport" runat="server" Text="IC / Passport : " />
                                        </td>
                                        <td>
                                            <asp:TextBox ID="icPassport" runat="server" />
                                        </td>
                                        <td>
                                            <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ControlToValidate="icPassport"
                                                CssClass="field-validation-error" Text="*"
                                                SetFocusOnError="true" ValidationGroup="vg1" />
                                        </td>
                                    </tr>
                                    <tr>
                                        <td>
                                            <asp:Label ID="Label10" AssociatedControlID="mobile" runat="server" Text="Mobile : " />
                                        </td>
                                        <td>
                                            <asp:TextBox ID="mobile" runat="server" placeholder="60123456789" />
                                        </td>
                                        <td>
                                            <asp:RequiredFieldValidator ID="RequiredFieldValidator4" runat="server" ControlToValidate="mobile"
                                                CssClass="field-validation-error" Text="*"
                                                SetFocusOnError="true" ValidationGroup="vg1" /><br />
                                            <asp:CompareValidator ID="CompareValidator3" runat="server" ControlToValidate="mobile"
                                                Operator="DataTypeCheck" Type="Double" ErrorMessage="Mobile number must be integer."
                                                CssClass="field-validation-error" ValidationGroup="vg1" Display="None" /><br />
                                            <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="mobile"
                                                ErrorMessage="Mobile Number must within 10 to 18 digits." ValidationExpression="^\d{10,18}$"
                                                CssClass="field-validation-error" ValidationGroup="vg1" Display="None" />
                                        </td>
                                    </tr>
                                    <tr>
                                        <td>
                                            <asp:Label ID="Label11" AssociatedControlID="street" runat="server" Text="Street : " />
                                        </td>
                                        <td>
                                            <asp:TextBox ID="street" runat="server" />
                                        </td>
                                        <td>
                                            <asp:RequiredFieldValidator ID="RequiredFieldValidator5" runat="server" ControlToValidate="street"
                                                CssClass="field-validation-error" Text="*"
                                                SetFocusOnError="true" ValidationGroup="vg1" />
                                        </td>
                                    </tr>
                                    <tr>
                                        <td>
                                            <asp:Label ID="Label12" AssociatedControlID="townstate" runat="server" Text="Town / State : " />
                                        </td>
                                        <td>
                                            <asp:TextBox ID="townstate" runat="server" />
                                        </td>
                                        <td>
                                            <asp:RequiredFieldValidator ID="RequiredFieldValidator6" runat="server" ControlToValidate="townstate"
                                                CssClass="field-validation-error" Text="*"
                                                SetFocusOnError="true" ValidationGroup="vg1" />
                                        </td>
                                    </tr>
                                    <tr>
                                        <td>
                                            <asp:Label ID="Label13" AssociatedControlID="country" runat="server" Text="Country : " />
                                        </td>
                                        <td>
                                            <asp:DropDownList ID="country" runat="server" />
                                        </td>
                                        <td>
                                            <asp:CompareValidator ID="CompareValidator4" runat="server"
                                                ControlToValidate="country" ValueToCompare="Select One..." Type="String" Operator="NotEqual"
                                                Text="*" CssClass="field-validation-error"
                                                SetFocusOnError="true" ValidationGroup="vg1" />
                                        </td>
                                    </tr>
                                    <tr>
                                        <td>
                                            <asp:Label ID="Label14" AssociatedControlID="postalcode" runat="server" Text="Postal Code : " />
                                        </td>
                                        <td>
                                            <asp:TextBox ID="postalcode" runat="server" />
                                        </td>
                                        <td>
                                            <asp:RequiredFieldValidator ID="RequiredFieldValidator7" runat="server" ControlToValidate="postalcode"
                                                CssClass="field-validation-error" Text="*"
                                                SetFocusOnError="true" ValidationGroup="vg1" /><br />
                                            <asp:CompareValidator ID="CompareValidator5" runat="server" ControlToValidate="postalcode"
                                                Type="Integer" Operator="DataTypeCheck" ErrorMessage="Postal Code must be integer."
                                                CssClass="field-validation-error" ValidationGroup="vg1" Display="none" /><br />
                                            <asp:RegularExpressionValidator ID="RegularExpressionValidator2" runat="server" ControlToValidate="postalcode"
                                                ErrorMessage="Postal Code, 5 or 9 Digits." ValidationExpression="\d{5}?(\d{4})?$"
                                                CssClass="field-validation-error" ValidationGroup="vg1" Display="None" />
                                        </td>
                                    </tr>
                                    <tr>
                                        <td>
                                            <asp:Label ID="Label15" AssociatedControlID="yearOfBirth" runat="server" Text="Year Of Birth : " />
                                        </td>
                                        <td>
                                            <asp:DropDownList ID="yearOfBirth" runat="server">
                                                <asp:ListItem Value="0">Year</asp:ListItem>
                                            </asp:DropDownList>
                                        </td>
                                        <td>
                                            <asp:CompareValidator ID="CompareValidator6" runat="server"
                                                ControlToValidate="yearOfBirth" ValueToCompare="0" Operator="NotEqual"
                                                Text="*" CssClass="field-validation-error"
                                                SetFocusOnError="true" ValidationGroup="vg1" />
                                        </td>
                                    </tr>
                                </table>
                            </LoggedInTemplate>
                        </asp:LoginView>
                    </ContentTemplate>
                </asp:UpdatePanel>
                <asp:Button ID="Button1" Text="Next" CommandName="NextView" runat="server" />
            </asp:View>

C# コード ビハインド

protected void login_Click(object sender, EventArgs e)
    {
        MultiView1.SetActiveView(View2);

        if (User.Identity.IsAuthenticated)
        {
            string userId = (Membership.GetUser().ProviderUserKey).ToString();
            SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString);
            SqlCommand cmd = new SqlCommand();
            string selectcmd = "select Email from Memberships where userID='" + userId + "'";
            string selectcmd2 = "select custEmail, title, name, icPassport, mobile, street, townstate, postalcode, townstate, yearOfBirth from custInfo where userID='" + userId + "'";

            SqlDataReader dr;
            cmd = new SqlCommand(selectcmd2, con);
            con.Open();
            dr = cmd.ExecuteReader();

            if (dr.HasRows)
            {

                while (dr.Read())
                {
                    ((TextBox)this.LoginView1.FindControl("custEmail")).Text = dr.GetValue(1).ToString();
                    ((DropDownList)LoginView1.FindControl("title")).SelectedValue = dr.GetValue(2).ToString();
                    ((TextBox)LoginView1.FindControl("name")).Text = dr.GetValue(3).ToString();
                    ((TextBox)LoginView1.FindControl("icPassport")).Text = dr.GetValue(4).ToString();
                    ((TextBox)LoginView1.FindControl("mobile")).Text = dr.GetValue(5).ToString();
                    ((TextBox)LoginView1.FindControl("street")).Text = dr.GetValue(6).ToString();
                    ((DropDownList)LoginView1.FindControl("townstate")).SelectedValue = dr.GetValue(7).ToString();
                    ((TextBox)LoginView1.FindControl("postalcode")).Text = dr.GetValue(8).ToString().Trim();
                    ((TextBox)LoginView1.FindControl("townstate")).Text = dr.GetValue(9).ToString();
                    ((DropDownList)LoginView1.FindControl("yearOfBirth")).SelectedValue = dr.GetValue(10).ToString();
                }
                dr.Close();
                con.Close();
            }

            else
            {
                dr.Close();
                cmd = new SqlCommand(selectcmd, con);
                dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    (this.LoginView1.FindControl("custEmail") as TextBox).Text = dr.GetValue(0).ToString();
                }
                dr.Close();
                con.Close();
            }
        }
    }
4

1 に答える 1

0

FindControl は現在のレベルのみを検索することに注意してください。ブランチ (MultiView、Panel、PlaceHolder などの内部) も検索する場合は、何らかの再帰検索を使用する必要があります。

最初にマルチビュー コントロールでコントロールを見つけ、MultiView.FindControl メソッドを使用して、その見つかったコントロールの子コントロールにアクセスします。

いくつかのサンプル投稿

http://www.codeproject.com/Articles/13836/Find-child-controls-inside-a-MultiView-control-in

于 2013-08-17T11:34:00.587 に答える