显示确认框然后根据答案编辑文本框字段

Show confirmation box then edit textbox field based on answer

我有一个 asp.net 网络表单页面,其中有一个包含类别的下拉列表。如果用户选择类别 "ER" 或 "DR",将根据所选类别填充描述文本框。但是,我需要通知用户,如果他们切换类别,他们在描述字段中的文本将会丢失。

submit_ticket.aspx

function ShowConfirmation(ddlCategory) {
    //Not sure what goes here.
}

<asp:DropDownList ID="ddlCategory" runat="server" CssClass="DropDownList" OnSelectedIndexChanged="ddlCategory_SelectedIndexChanged" AutoPostBack="true" />

Submit_ticket.aspx.cs

protected void ddlCategory_SelectedIndexChanged(object sender, EventArgs e)
{
    if (IsPostBack)
    {
        if ((ddlCategory.SelectedItem.Text == "DR") || ddlCategory.SelectedItem.Text == "ER")
            ddlCategory.Attributes.Add("onChange", "return ShowConfirmation(this);");

        if (ddlCategory.SelectedItem.Text == "DR")
            txtDescription.Text = "DR Template";
        else if (ddlCategory.SelectedItem.Text == "ER")
            txtDescription.Text = "ER Template";
    }
}

总共有 7 个类别,但我只需要在上面列出的两个类别中使用此功能。用于这些类别的 "template" 很长,不能选择用 Javascript.

填充描述文本框

非常感谢任何帮助。

从下拉列表中删除 AutoPostBack 并将您自己的 js 函数添加到 onchange 事件。

<asp:DropDownList ID="DropDownList1" runat="server" onchange="func();">
    <asp:ListItem Text="01"></asp:ListItem>
    <asp:ListItem Text="02"></asp:ListItem>
    <asp:ListItem Text="03"></asp:ListItem>
</asp:DropDownList>

在你的js函数中得到用户的响应。如果 'yes',使用 asp.net 内置的 __doPostBack 函数强制回发。包括控件名称和 'true' 作为参数。

function func() {
    if (confirm("change?")) {
        // parameters are: '__EVENTTARGET' and '__EVENTARGUMENT'.
        __doPostBack("DropDownList1", "true");  
    }      
}

在页面加载时检查 __EVENTARGUMENT。

protected void Page_Load(object sender, EventArgs e)
{
    if(Request.Params.Get("__EVENTARGUMENT") == "true")
    {
        // call a method.
        TextChanger();
    }
}

protected void TextChanger()
{
    if (DropDownList1.SelectedItem.Text == "02")
    {
        Label2.Text = "changed text";
    }
}