Web项目中的登录控件是这样的:
BLL层是这样的:
DAL层是这样的:
Model层是这样的:
问题是我的DAL层返回的内容中,如果没有单引号,就能正常返回,一旦有“‘”单引号的存在,点击登录后就没有反应,只是界面看似刷新一下。
目测YF.JsHelper.Alert输出js代码,用的alert,然后字符串用的单引号扩起传入的参数值,参数值包含单引号导致js语法出错了
内容改成下面,输出js代码时对单引号转义一次。
return "\\'";
或者修改YF.JsHelper.Alert方法,将传入参数中单引号进行内容转义替换或者直接replace去掉
public void Alert(string s)
{
//s = s.Replace("'", "");//去掉
s = s.Replace("'", "\\'");//不去掉,需要进行转义替换
HttpContext.Current.Response.Write("<script>alert('" + s + "')</" + "script>");
}
改成return "123\\\'456";
因为你返回的字符串要拼接到一个用单引号的字符串中
比如
n = "123'456"
"name='"+ n +"'"
结果是 name='123'456'
中间的 ' 被当成了字符串结束符
这样'123'成了一个字符串, 后面的456'在字符串之外,就语法错误了
改成
n = "123\\\'456"
结果是 name='123\'456' 才正确, 中间的 '前面用\转义就不会被当成字符串结束符了
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
主要看JavaScript的处理,你的代码时,因由于单引号导致最终的JavaScript脚本错误,可以F12看一具体的错误。对于做这登录方便的代码,建议对单双引号进行判断并处理掉。
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!