0

ページに 2 つのドロップダウンリストがあります。1 つはアクティビティ用、もう 1 つはサブ アクティビティ用です。アクティビティ ドロップダウンリストが変更されると、サブ アクティビティ ドロップダウンリストの値を取得します。2 番目のドロップダウンリストに updatepanel を使用しており、トリガーは最初のドロップダウンリストに設定されています。これは、ページを最大1〜2分間アイドル状態にするまで、魔法のように機能しています。アクティビティ ドロップダウン リスト (トリガー) の値を変更すると、完全なポストバックが発生し、2 番目のドロップダウン リストの項目が入力されません。

以下は私のコードです。

Aspx

   <div class="form-line">
    <label>Activity</label>

    <asp:DropDownList ID="ddlActivity" required="required" CssClass="chosen-select" runat="server" Width="200px" AppendDataBoundItems="true" OnSelectedIndexChanged="SelectedActivity_Changed" AutoPostBack="true" CausesValidation="false">
    </asp:DropDownList>

</div>
<div class="form-line">
    <label>Sub Activity</label>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="ddlActivity" EventName="SelectedIndexChanged" />
        </Triggers>
        <ContentTemplate>
            <asp:DropDownList ID="ddlSubActivity" runat="server" Width="200px" required="required" CssClass="chosen-select" AppendDataBoundItems="true" CausesValidation="false">
            </asp:DropDownList>
        </ContentTemplate>
    </asp:UpdatePanel>

</div>

コードビハインド

 [ToolboxItemAttribute(false)]
    public partial class MyEstimatesAdd : WebPart
    {
        static string connStr = ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString;
        ChronoLogDataContext dc = new ChronoLogDataContext(connStr);
        // Uncomment the following SecurityPermission attribute only when doing Performance Profiling on a farm solution
        // using the Instrumentation method, and then remove the SecurityPermission attribute when the code is ready
        // for production. Because the SecurityPermission attribute bypasses the security check for callers of
        // your constructor, it's not recommended for production purposes.
        // [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Assert, UnmanagedCode = true)]
        public MyEstimatesAdd()
        {
        }

        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            InitializeControl();
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                if (Page.Request.QueryString["Issue_ID"] != "" && Page.Request.QueryString["Issue_ID"] != null)
                {
                    Int64 issueid = Int64.Parse(Page.Request.QueryString["Issue_ID"]);
                    string sCurrentUserEmail;
                    SPUser cuser = SPControl.GetContextWeb(Context).CurrentUser;

                    sCurrentUserEmail = cuser.Email;
                    dc = new ChronoLogDataContext(connStr);

                    var resource = (from r in dc.RESOURCEs
                                    where r.Email == sCurrentUserEmail
                                    select r).FirstOrDefault();

                    ddlActivity.DataSource = (from a in dc.ACTIVITY_CATEGORies
                                              select a).ToList();

                    ddlActivity.DataValueField = "Activity_Category_ID";
                    ddlActivity.DataTextField = "Description";
                    ddlActivity.DataBind();
                    ddlActivity.Items.Insert(0, new ListItem("", ""));
                }


            }
        }

        //RUN AGAIN PRIMARY SET
        protected void btnAdd_Click(object sender, EventArgs e)
        {
            int hours;
            if (!int.TryParse(txtHours.Text, out hours))
            {
                throw new SPException("Hours must be a numeric value");
            }
            string sCurrentUserEmail;
            SPUser cuser = SPControl.GetContextWeb(Context).CurrentUser;
            sCurrentUserEmail = cuser.Email;
            dc = new ChronoLogDataContext(connStr);
            var resource = (from r in dc.RESOURCEs
                            where r.Email == sCurrentUserEmail
                            select r).FirstOrDefault();
            Int64 issueid = Int64.Parse(Page.Request.QueryString["Issue_ID"]);
            decimal time = decimal.Parse(hours + "." + ddlMinutes.SelectedValue.ToString(), CultureInfo.InvariantCulture);
            ESTIMATE estimate = new ESTIMATE { Activity_ID = int.Parse(ddlActivity.SelectedItem.Value), Date_Captured = DateTime.Now, Estimated_Time = time, Features = txtFeatures.Text, Issue_ID = issueid, Resource_ID = resource.Resource_ID, Sub_Activity_ID = int.Parse(ddlSubActivity.SelectedItem.Value) };
            dc.ESTIMATEs.InsertOnSubmit(estimate);
            dc.SubmitChanges();
            Close_Save();
        }
        protected void Close_Save()
        {
            HttpContext context = HttpContext.Current;
            if (HttpContext.Current.Request.QueryString["IsDlg"] != null)
            {
                context.Response.Write("<script type='text/javascript'>window.frameElement.commitPopup()</script>");
                context.Response.Flush();
                context.Response.End();
            }


        }

        protected void SelectedActivity_Changed(object sender, EventArgs e)
        {
            int activityid = int.Parse(ddlActivity.SelectedItem.Value);
             dc = new ChronoLogDataContext(connStr);
             var subactivities = (from s in dc.ACTIVITY_SUBCATEGORies
                                  where s.Activity_Category_ID == activityid
                                  select s).ToList();
             ddlSubActivity.Items.Clear();
             ddlSubActivity.DataSource = subactivities;
             ddlSubActivity.DataValueField = "Activity_SubCategory_ID";
             ddlSubActivity.DataTextField = "Description";
             ddlSubActivity.DataBind();
             ddlSubActivity.Items.Insert(0, new ListItem("", ""));
             UpdatePanel1.Update();

        }
    }
4

1 に答える 1

1

次のように、両方のドロップダウン リストを同じ内に配置するUpdatePanelか、それぞれ独自の内に配置しますUpdatePanel

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="ddlActivity" EventName="SelectedIndexChanged" />
    </Triggers>
    <ContentTemplate>
        <div class="form-line">
            <label>Activity</label>
            <asp:DropDownList ID="ddlActivity" required="required" CssClass="chosen-select" runat="server" Width="200px" AppendDataBoundItems="true" OnSelectedIndexChanged="SelectedActivity_Changed" AutoPostBack="true" CausesValidation="false">
            </asp:DropDownList>
        </div>
        <div class="form-line">
            <label>Sub Activity</label> 
            <asp:DropDownList ID="ddlSubActivity" runat="server" Width="200px" required="required" CssClass="chosen-select" AppendDataBoundItems="true" CausesValidation="false">
            </asp:DropDownList>
        </div>
    </ContentTemplate>
</asp:UpdatePanel>
于 2013-11-08T12:39:28.720 に答える