Показать окно подтверждения, затем отредактируйте текстовое поле на основе ответа - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть страница веб-форм 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 категорий, но эта функциональность мне нужна только в двух перечисленных выше.«Шаблон», используемый для этих категорий, длинный, поэтому нельзя заполнять текстовое поле «Описание» Javascript.

Любая помощь очень ценится.

1 Ответ

1 голос
/ 24 сентября 2019

Удалите 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 получите ответ от пользователя.Если «да», форсируйте обратную передачу, используя функцию __doPostBack, встроенную в asp.net.Включите имя элемента управления и «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";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...