C# javascript单报价问题
我正在创建asp.net c#web应用程序。 我在gridview的每一行的第一列上都有一个linkButton(lnkDelete)。 此外,我还在GridView的“RowDataBound”事件中动态地向该链接按钮添加一个属性。 具体如下:C# javascript单报价问题,c#,javascript,asp.net,C#,Javascript,Asp.net,我正在创建asp.net c#web应用程序。 我在gridview的每一行的第一列上都有一个linkButton(lnkDelete)。 此外,我还在GridView的“RowDataBound”事件中动态地向该链接按钮添加一个属性。 具体如下: lnkDelete.Attributes.Add("onclick", "javascript:return confirm('Are you sure you want to delete this Product :" +
lnkDelete.Attributes.Add("onclick", "javascript:return confirm('Are you sure you want to delete this Product :" +
DataBinder.Eval(e.Row.DataItem, "ProductName") + "')");
现在我要做的是,当用户点击链接按钮时,会弹出一个javascript确认弹出窗口,询问“您确定要删除此产品吗?”。
一切正常。但当产品名称与sngle报价一起出现时,问题就出现了。
比如:产品一。
当我单击lnkDelete时,ErrorConsole(javascript)中出现语法错误,错误为:(非法字符)
我知道问题在于单一报价
请告诉我需要对我的上述代码进行哪些更改。
我希望我说得很清楚。在单引号中添加
\
怎么样
DataBinder.Eval(e.Row.DataItem, "ProductName").ToString.Replace("'", "\\'")
使用
而不是DataBinder.Eval(e.Row.DataItem,“ProductName”)
你可以用
HttpUtility.HtmlEncode(DataBinder.Eval(e.Row.DataItem,“ProductName”).ToString())
是否尝试转义字符串
如果您有一个转义字符串,那么您可以使用javascript进行转义
lnkDelete.Attributes.Add("onclick", "javascript:return confirm('Are you sure you want to delete this Product :' + unescape(\'" + escapedString + "\'))");
我在我的一个自动搜索工具项目中做了类似的事情。以下是您可以尝试的内容:
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时使用了“替换”。这对我很有用。您的产品名称是否包含一个报价?我觉得这没问题。请尝试使用
Replace
方法对引号进行双引号引用-即DataBinder.Eval(e.Row.DataItem,“ProductName”)。Replace(“,”)
@Tim,我想您的意思是\\”DataBinder.Eval(e.Row.DataItem,“ProductName”)。替换(“'”,“\\\”)
@AdamPlocher-您是对的。我已经有一段时间没有使用客户端JavaScript了,忘记了转义字符。理论很好,实现很差:)@Tim我试过了,但还是出现了同样的错误。我也试过了你的选项,效果很好。但当产品名称包含反斜杠时,在确认弹出窗口中给出错误的产品名称,如:'\\Prd。它给出(你确定要删除此产品:'\Prd)与“\\prdony”不同的是,如果您有一个单引号”
并使用HttpUtility.HtmlEncode
,它将变成一个&39
,如果显示给客户端。