Tworzę aplikację internetową ASP.NET C #. Mam Linkbutton (LNKDELETE) na pierwszej kolumnie każdego wiersza Gridview. Dynamicznie dodam atrybut do tego przycisku łącza wewnątrz "RowdatAbound" zdarzenia Gridview. Jak następujące:

  lnkDelete.Attributes.Add("onclick", "javascript:return confirm('Are you sure you want to   delete this Product :" +
                    DataBinder.Eval(e.Row.DataItem, "ProductName") + "')");

Teraz, do czego próbuję zrobić, to po tym, że użytkownik kliknie ten przycisk Link A JavaScript Potwierdź Popup Otwórz, pytając "Czy na pewno chcesz usunąć ten produkt". Każda rzecz działa dobrze. Ale problem występuje, gdy nazwa produktów jest wyposażony w cytat sngle. Jak: produkt. Błąd Syntax pojawia się w ErrorConsole (JavaScript), gdy klikam LNKDelete i błąd: (nielegalny charakter) Wiem, że problem jest z pojedynczym cytatem.

Proszę, zasugeruj, jaka zmiana wymagana w moim powyżej kodzie. Mam nadzieję, że jestem jasny.

2
Tarun Tak 5 październik 2012, 09:33

4 odpowiedzi

Najlepsza odpowiedź

Co powiesz na dodanie {x0}} w jednym cytatie?

DataBinder.Eval(e.Row.DataItem, "ProductName").ToString.Replace("'", "\\'")
6
John Woo 5 październik 2012, 05:37

Użyj httputility.htmlenodode

Zamiast DataBinder.Eval(e.Row.DataItem, "ProductName")

Możesz użyć

HttpUtility.HtmlEncode(DataBinder.Eval(e.Row.DataItem, "ProductName").ToString())

0
prashanth 5 październik 2012, 05:43

Czy próbowałeś uciec po sznurku?

Jeśli masz uciekający ciąg, możesz uniknąć JavaScript.

lnkDelete.Attributes.Add("onclick", "javascript:return confirm('Are you sure you want to  delete this Product :' + unescape(\'" + escapedString + "\'))");
0
JNo 5 październik 2012, 05:51

Zrobiłem podobną rzecz w jednym z moich zautomatyzowanych narzędzi projektu wyszukiwania. Oto, czego możesz spróbować:

protected void grdKeywords_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            LinkButton linkDeleteButton = e.Row.FindControl("lnkdel") as LinkButton;
            Label lblGridKeyword = e.Row.FindControl("lblGridKeyword") as Label;
            TextBox txtGridBox = e.Row.FindControl("txtGridKeyword") as TextBox;

            if (lblGridKeyword != null)
            {
                if (lblGridKeyword.Text.Contains("'"))
                {
                    lblGridKeyword.Text = lblGridKeyword.Text.Replace("'", "'");

                }
            }

            if (txtGridBox != null)
            {
                if (txtGridBox.Text.Contains("'"))
                {
                    txtGridBox.Text = txtGridBox.Text.Replace("'", "`");
                }
            }

            if (txtGridBox == null)
                linkDeleteButton.Attributes.Add("onclick", "javascript:return confirm('Are you sure about deleting keyword: " + lblGridKeyword.Text + " ?')");
            else if (lblGridKeyword == null)
                linkDeleteButton.Attributes.Add("onclick", "javascript:return confirm('Are you sure about deleting keyword: " + txtGridBox.Text + " ?')");




        }
    }

lblgridkeyword to etykieta, która zawiera dane zawierające pojedynczy cytat. Wymieniłem to za pomocą "w momencie RowDatabound. To działało dla mnie.

0
Amin Sayed 5 październik 2012, 05:53