从我的代码背后我将它传递给客户端脚本
C#代码隐藏 * 请注意,如果我评论下面的行而不是我没有得到js错误。 *
if (btnDelete != null)
{
btnDelete.Attributes["onclick"] = String.Format("return DeleteRow('{0}', '{1}', '{2}', '{3}');", e.Row.ClientID, e.Row.RowIndex, DataBinder.Eval(e.Row.DataItem, "Id"), DataBinder.Eval(e.Row.DataItem, "Name"));
}
//javascript
function DeleteRow(rowId, rowIdx, Id, Name) {
var result = confirm('Are you sure you want to delete this record? \n\n Id: ' + Id + "\n Name: " + Name);
if (!result)
HighlightRow(rowId, rowIdx % 2 ? "#DEEEE9" : "#FFFFFF");
return result;
}
错误消息:
Message: Unterminated string constant
Line: 1280
Char: 180
Code: 0
URI: http://localhost:4964/admin/default.aspx
Message: Unterminated string constant
Line: 1341
Char: 178
Code: 0
URI: http://localhost:4964/default.aspx
Message: Expected ')'
Line: 1401
Char: 152
Code: 0
URI: http://localhost:4964/default.aspx
答案 0 :(得分:2)
很难从你的问题中看出来,但听起来像返回的值包括单引号字符(撇号),它会在生成的javascript中结束你的字符串。
为引发错误的行生成的代码是什么?
当我遇到类似的事情时,它会产生类似的结果:
return DeleteRow('1', '2', 'abscde', 'Mc'Adams');
由于Mc'Adams的价值,会导致错误。如果是这种情况,那么您将不得不通过一种方法发送您的数据,该方法会转义会破坏您的javascript的值。
答案 1 :(得分:1)
您使用过混合单引号和双引号。在这里改变一行;
var result = confirm('Are you sure you want to delete this record? \n\n Id: ' + Id + '\n Name: ' + Name)
答案 2 :(得分:0)
这是我如何修复它:
btnDelete.Attributes["onclick"] = String.Format("return DeleteRow('{0}', '{1}', '{2}', '{3}');", e.Row.ClientID, e.Row.RowIndex, DataBinder.Eval(e.Row.DataItem, "Id"), DataBinder.Eval(e.Row.DataItem, "Name").ToString().Trim().Replace("'", "\\'")));