2013-07-18 2 views
0

내 asp.net 앱의 사용자 (멤버십 클래스 사용)가있는 동적 테이블이 있습니다. javascript를 사용하여 팝업을 열기 위해 각 역할 셀 안에 컨트롤을 추가하려고합니다. 지금은 함수가 실행되는지 만 확인합니다. 그러나 셀을 클릭하면 오류가 발생합니다. "잡히지 않은 SyntaxError : 예기치 않은 토큰}". 뒤에예기치 않은 토큰 "}"LiteralControl 오류

<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); 

    } 

** 그것은 이상한이기 때문에가 코드에서 hilighted 라인을 변경할 때 :

여기

내 영문입니다
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>"); 

또는

당신 '(alert_function'주위의 onclick =를 작은 따옴표를 사용하는 것처럼 문제가 보이는
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

는. 난 당신이 따옴표로 전체 일을 감싸 이해 alert_function ('username') 안에 큰 따옴표를 넣지 만 잘못되었습니다. 예를 들어 바깥 쪽 따옴표를 제거하고 결과를 문자열로 보면 onclick = 'alert_function ('username ')'이됩니다. onclick 값을 작은 따옴표로 묶었지만 작은 따옴표 두 개를 사용하여 사용자 이름을 감싸는 것을 볼 수 있습니다.이 문자열 만 보았을 때 문제는 전체 문자열을 작은 따옴표로 묶어야하지만 여러 개의 작은 따옴표를 사용하여 문자열을 여러 문자열로 분리해야합니다. 문자열 내부에서 문자열을 처리 할 때조차도 작은 따옴표와 큰 따옴표를 대체해야합니다.

이 문제를 해결하려면 이미 동일한 따옴표로 묶인 문자열 내에 작은 따옴표 또는 큰 따옴표를 중첩하려는 위치에서 백 슬래시 이스케이프를 사용하십시오. 이것은 말 그대로 문자를 문자열을 끝내는 대신 문자로 문자열에 넣을 것입니다. 내가 문자열 내에서 따옴표로 사용자 이름의 가치를 둘러싸고 두 번째 \ "를 추가 제외

LiteralControl lc=new LiteralControl("<a onclick='alert_function(\""+u.UserName.ToString()+"\")'>" + role[0] + "</a>"); 

이 두 번째 솔루션은, 기본적으로.