我有一个检查登录凭据的网页。该页面调用一个函数,然后该函数与 Oracle 数据库中的表建立连接,并检查是否允许该用户查看该应用程序。这一切都是使用 c# 完成的,但是如果它们是来自数据库的 fatal error ,我想使用 javascript 通知用户。在我的 C# 代码中,我有一个字符串变量,它基本上会将 javascript 函数打印到网页中。看起来像这样。
string javaScript =
"<script>"+
"var find = ':';"+
"var re = new RegExp(find, 'g');" +
"str='@"+CheckAccess[0]._ERROR.ToString().Replace(":"," ")+"';"+
"str = str.replace(re, '');"+
"if ($('#login_error').css('display') == 'none') {" +
"$('#login_error').text(str).show(); }" +
"else {Return;}</script>";
当数据库返回错误时,它会返回一个多行错误,如下所示。
ORA-06550 line 1, column 7
PLS-00306 wrong number or types of arguments in call to 'GETUSERACCESS'
ORA-06550 line 1, column 7
PL/SQL Statement ignored at Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
我在网上看到的所有示例都说用“/”将其分开,这样我就不会继续收到“未终止的字符串文字”错误。但是我没有看到有效的方法来做到这一点。是否有更好的方法来实现我想要完成的任务,或者我是否必须找到一种方法来解析该字符串并猜测换行符将在哪里。非常感激任何的帮助。
谢谢 米格尔
最佳答案
我不建议尝试按照您现在的方式进行操作。将 JS 代码写成这样的 C# 字符串有点奇怪,例如:如果错误消息字符串不包含您期望的内容,则似乎有可能发生注入(inject)攻击。
发生错误时,您可以在页面中包含用于处理错误的 JS 代码,然后仅传递包含错误字符串的 JSON 序列化数据结构,而不是在发生错误时尝试将 JS 代码传递给客户端。这应该允许多行字符串和其他特殊字符从服务器正确传递到客户端。
例如如果你的类(class)是这样的:
public class MyClass
{
public bool Success { get; set; }
public string ErrorMessage { get; set; }
}
那么你的 Controller 方法可能如下所示:
public JsonResult TryToValidate(...)
{
MyClass myClass = // result
return Json(myClass);
}
在登录页面上使用伪 JS,如下所示:
MakeAjaxCallToTryToValidate(...)
.whenThatsDone(function ...() {
if !result.Success
alert(result.ErrorMessage);
});
或者,由于无论如何您都不应该向普通用户公开错误详细信息,因此您可以将错误详细信息记录在管理员可以看到的服务器上,并向用户提供通用错误消息。如果您希望用户执行的操作无效(例如输入错误的密码),则错误消息应该告诉他们,以及如何自行修复它,但“参数数量或类型错误”错误不是通常不属于该类别。
关于c# - 将多行字符串变量从 C# 传递到 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19390201/