0

我有一个动态表,其中包含来自我的 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>");

(删除“''”)它可以工作,但用户名不会作为字符串发送,所以只有数字被提醒。**

4

3 回答 3

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);
于 2013-07-18T18:28:47.677 回答
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>");

这基本上是您的第二个解决方案,除了我添加了第二个 \" 以将您的用户名值括在字符串中的引号中。

于 2013-07-18T18:37:36.833 回答
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>");
于 2013-07-18T18:28:56.883 回答