我有一个动态表,用户来自我的asp.net应用程序(使用会员级)。 我试图在每个角色单元格中添加一个控件,以便使用javascript打开弹出窗口。现在我只检查功能是否会启动。但是当我单击单元格时会出现错误:" Uncaught SyntaxError:Unexpected token}" 。
这是我的aspx:
<head runat="server">
<title></title>
<script type="text/javascript">
function alert_function(id)
{
alert(id);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:placeholder ID="Placeholder1" runat="server"></asp:placeholder>
</div>
</form>
</body>
</html>
和我的代码背后:
protected void Page_Load(object sender, EventArgs e)
{
MembershipUserCollection users = Membership.GetAllUsers();
Table tbl = new Table();
TableRow h_row = new TableRow();
TableCell c1 = new TableCell();
TableCell c2 = new TableCell();
TableCell c3 = new TableCell();
TableCell c4 = new TableCell();
TableCell c5 = new TableCell();
TableCell c6 = new TableCell();
c1.Text = "משתמש מחובר?";
c2.Text = "התחבר לאחרונה";
c3.Text = "נוצר ב";
c4.Text = "דואר אלקטרוני";
c5.Text = "תפקיד";
c6.Text = "שם משתמש";
h_row.Controls.Add(c1);
h_row.Controls.Add(c2);
h_row.Controls.Add(c3);
h_row.Controls.Add(c4);
h_row.Controls.Add(c5);
h_row.Controls.Add(c6);
tbl.Controls.Add(h_row);
foreach (MembershipUser u in users)
{
TableRow row1 = new TableRow();
TableCell cell1 = new TableCell();
TableCell cell2 = new TableCell();
TableCell cell3 = new TableCell();
TableCell cell4 = new TableCell();
TableCell cell5 = new TableCell();
TableCell cell6 = new TableCell();
cell1.Text = u.IsOnline.ToString();
cell2.Text = u.LastLoginDate.ToString();
cell3.Text = u.CreationDate.ToString();
cell4.Text = u.Email;
string user_name=u.UserName;
string[] role = Roles.GetRolesForUser(user_name);
if (role.Length < 1)
cell5.Text = "אין תפקיד";
**else
{
LiteralControl lc=new LiteralControl("<a onclick='alert_function('"+u.UserName.ToString()+"')'>" + role[0] + "</a>");
cell5.Controls.Add(lc);
}**
cell6.Text = u.UserName;
row1.Controls.Add(cell1);
row1.Controls.Add(cell2);
row1.Controls.Add(cell3);
row1.Controls.Add(cell4);
row1.Controls.Add(cell5);
row1.Controls.Add(cell6);
tbl.Controls.Add(row1);
}
Placeholder1.Controls.Add(tbl);
}
**这很奇怪,因为当我将代码中的高亮线更改为:
LiteralControl lc=new LiteralControl("<a onclick='alert_function("+u.UserName.ToString()+")'>" + role[0] + "</a>");
(删除&#34;&#39;&#39;&#34;)它有效,但用户名不会以字符串形式发送,因此只会提醒号码。**
答案 0 :(得分:1)
试试这个
LiteralControl lc = new LiteralControl(String.Format("<a
onclick=\"alert_function('{0}')\">{1}</a>", u.UserName.ToString(), role[0]));
或者
string link = String.Format("<a onclick=\"alert_function('{0}')\">{1}</a>",
u.UserName.ToString(), role[0]);
LiteralControl lc = new LiteralControl(link);
答案 1 :(得分:1)
问题看起来你在onclick ='alert_function(')周围使用单引号。我知道你用双引号包装整个东西,所以你尽量避免在alert_function('username')中使用双引号但是例如,如果您要删除外部引号并将结果看作字符串,则可以使用onclick ='alert_function('username')'。请注意,您将onclick值包装在单引号中,但是你也使用单引号两个包装用户名,如果你单独查看这个字符串你应该能够看到问题,整个字符串应该用单引号括起来但是你有多个单引号将字符串分成多个你还需要替换单引号和双引号,这样就不会发生这种情况,即使处理字符串中的字符串也是如此。
要解决此问题,请在要使用相同引号包围的字符串中嵌套单引号或双引号的位置,使用反斜杠转义。这将字面上将引号字符作为字符放入字符串中,而不是结束字符串。
LiteralControl lc=new LiteralControl("<a onclick='alert_function(\""+u.UserName.ToString()+"\")'>" + role[0] + "</a>");
这基本上是你的第二个解决方案,除了我添加了第二个\“以在字符串中用引号包围用户名的值。
答案 2 :(得分:0)
转义你的文字中的引号。
LiteralControl lc =
new LiteralControl("<a onclick='alert_function(\""
+ u.UserName.ToString() + "\")'>" + role[0] + "</a>");
或
LiteralControl lc =
new LiteralControl("<a onclick=\"alert_function('"
+u.UserName.ToString()+"')\">" + role[0] + "</a>");