2013-07-18 60 views
0

我有一個動態表與用戶從我的asp.net應用程序(使用成員資格類)。 我試圖在每個角色單元格內添加一個控件,以便使用javascript打開一個彈出窗口。現在我只檢查功能是否啓動。但是當我單擊單元格時發生錯誤:「未捕獲的SyntaxError:意外的令牌}」意外的令牌「}」與LiteralControl錯誤

這裏是我的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>"); 

(移除在「」「「)它的工作原理,但用戶名不派作爲一個字符串,因此只有數字被警告。**

+0

如果你使用一個字符串,它需要被引用。數字不需要被引用,否則,JavaScript將它解釋爲一個變量的引用......這可能沒有被定義爲 – Ian

+0

但它被引用..這個錯誤很奇怪.. – Dvirski

+0

你需要看看源代碼實際上在瀏覽器中結束了,從中可以看出問題的原因,很容易。 – Pointy

回答

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>"); 
+0

謝謝!你真是個好兄弟 – Dvirski

+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

問題看起來像您使用的是單引號周圍的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>"); 

這基本上是你的第二個解決方案,除了我添加了第二個\」包圍在字符串中您的用戶名在引號中的價值。