0

Selection-changeでメソッドを起動できません。私はDropDownList自体をコードビハインドから追加しています。コード:

  private TableCell CreateMTPLTypeCell(int insurerId, string MTPLType)
        {

            TableCell rg = new TableCell();
            rg.ID = string.Concat("rg_", insurerId);
            rg.CssClass = "formItem";
            //if (insurerId == 14)
            //{
                DropDownList ddl = new DropDownList();
                ddl.ID = "MTPLTypes";
                ddl.Items.Add(new ListItem("Standard", "1")); // add list items
                ddl.Items.Add(new ListItem("DubultOCTA", "2"));
                ddl.Items.Add(new ListItem("DubultOCTA+vējst", "3"));
                //ddl.SelectedIndex =
                //    ddl.Items.IndexOf(ddl.Items.
                //        FindByValue(MTPLType));
                ddl.SelectedIndexChanged += new EventHandler(MTPLType_selectedIndexChange);
                ddl.AutoPostBack = true;
                rg.Controls.Add(ddl);
            //}
            return rg;
        }

        void MTPLType_selectedIndexChange(object sender, EventArgs e)
        {
            DropDownList ddl = (DropDownList)sender;
            int insurerId = Int32.Parse(ddl.ID.Replace("rg_", ""));

            MTPLQuotes quotes = proposal.Properties.MtplQuotes[insurerId];
            if (quotes == null) return;

            proposal.GetSingleMTPLQuote(insurerId, Helpers.PortalUtilities.CurrentUser, BrokerInfo.GetBrokerInfo().Country.ID);

            DrawMtplQuotes(mtplPaymentMappingsCount > 0);
        }

DropDownListオブジェクトのいくつかの追加パラメーターを見逃していませんか?

Atmは次のように機能します。selectionChangeの後、「ロード」を開始しますが、メソッドに到達しません。:/

同じクラスに、onChangeイベント(Text_Change)を含む別のtableCellがあります->これは問題なく機能します。

private TableCell CreateInsurerMtplDiscountCell(int insurerId, decimal discount)
    {
        TableCell c = new TableCell();
        c.CssClass = "formItem";
        c.Style[HtmlTextWriterStyle.PaddingLeft] = "25px";

        TextBox txt = new TextBox();
        txt.ID = string.Format("ins_disc_{0}", insurerId);
        txt.Text = discount > 0 ? discount.ToString() : "";
        txt.TextChanged += new EventHandler(insurerDiscountPercent_TextChanged);
        txt.AutoPostBack = true;
        txt.Width = new Unit(40);
        c.Controls.Add(txt);

        Literal l = new Literal();
        l.Text = "%";
        c.Controls.Add(l);

        return c;
    }

    void insurerDiscountPercent_TextChanged(object sender, EventArgs e)
    {
        TextBox txt = (TextBox)sender;

        int insurerId = Int32.Parse(txt.ID.Replace("ins_disc_", ""));

        MTPLQuotes quotes = proposal.Properties.MtplQuotes[insurerId];
        if (quotes == null) return;

        decimal discountPercent;
        if (!Decimal.TryParse(txt.Text, out discountPercent))
            discountPercent = 0;

        quotes.InsurerDiscountPercent = discountPercent;
        foreach (MTPLQuote quote in quotes.Quotes)
            ApplyMtplInsurerDiscount(quote, discountPercent);

        DrawMtplQuotes(mtplPaymentMappingsCount > 0);
    }

修正しました-問題はTableCell.ID(rg.ID = string.Concat( "rg_"、insurerId);)に関するものでした。それを削除した後、すべてが正常に機能しました。なぜそうなのか誰もが知っていますか?

4

2 に答える 2

0

新しいコントロールを作成した後、Web サイトを更新する必要があると思います。AJAX-updatepanels を使用することをお勧めします (サイト全体を更新する必要はありません)。

  1. OnChanged-Event Name を追加するには、イベントハンドラ自体の代わりに文字列 Name を追加することもできます。

    ddl.SelectedIndexChanged = "MTPLType_selectedIndexChange";

  2. 権限制限の原因を制御するには、到達できない"protected void"代わりに使用する必要があると思います。"private void"

于 2013-02-25T10:42:37.350 に答える
0

SelectedIndexChangedイベントのドロップダウン リストにイベントをバインドする必要がありますPage_PreInit

その後、動作するはずです。

于 2013-02-25T10:54:19.243 に答える