2

我创建了 asp.net c# web 应用程序。我在gridview的每一行的第一列都有一个linkBut​​ton(lnkDelete)。我还在GridView的“RowDataBound”事件中动态地向该链接按钮添加一个属性。如下所示:

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

现在我要做的是当用户单击该链接按钮时,会打开一个 javascript 确认弹出窗口,询问“您确定要删除此产品”。一切正常。但是当产品名称带有单引号时,就会出现问题。喜欢:Product'One。当我单击 lnkDelete 并且错误是:(非法字符)时,ErrorConsole(javascript)出现语法错误,我知道问题出在单引号上。

请建议我在上面的代码中需要进行哪些更改。我希望我很清楚。

4

4 回答 4

6

添加\单引号怎么样?

DataBinder.Eval(e.Row.DataItem, "ProductName").ToString.Replace("'", "\\'")
于 2012-10-05T05:37:35.780 回答
0

您是否尝试转义字符串?

如果您有转义字符串,则可以使用 javascript 进行转义。

lnkDelete.Attributes.Add("onclick", "javascript:return confirm('Are you sure you want to  delete this Product :' + unescape(\'" + escapedString + "\'))");
于 2012-10-05T05:51:37.333 回答
0

我在我的搜索项目自动化工具之一中做了类似的事情。您可以尝试以下方法:

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是保存包含单引号的数据的标签。我在 RowDataBound 时使用 ' 替换了它。这对我有用。

于 2012-10-05T05:53:08.673 回答
0

使用HttpUtility.HtmlEncode

代替DataBinder.Eval(e.Row.DataItem, "ProductName")

您可以使用

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

于 2012-10-05T05:43:13.230 回答