2012-10-05 3 views
2

나는 asp.net C# 웹 응용 프로그램을 만들었습니다. gridview (gridview)의 각 행의 첫 번째 열에 linkButton (lnkDelete)이 있습니다. 또한 GridView의 "RowDataBound"이벤트 내에서 해당 링크 버튼에 동적으로 속성을 추가하려고합니다. 같은처럼 은 다음과 같습니다 사용자가 자바 스크립트 확인 팝업을 열어 링크 버튼 "이 제품을 삭제 하시겠습니까"질문을 클릭하면자바 스크립트 작은 따옴표 문제

lnkDelete.Attributes.Add("onclick", "javascript:return confirm('Are you sure you want to delete this Product :" + 
        DataBinder.Eval(e.Row.DataItem, "ProductName") + "')"); 

지금 내가 뭘하려고합니다. 모든 것이 잘 작동합니다. 그러나 문제는 제품의 이름에 sngle quote가있을 때 발생합니다. 처럼 : Product'One. 구문 오류는 lnkDelete를 클릭 할 때 ErrorConsole (javascript)에 나타나며 오류는 다음과 같습니다. (잘못된 문자) 작은 따옴표가 붙은 문제가 있습니다.

위의 코드에서 필요한 변경 사항을 제안하십시오. 나는 분명히 희망한다.

+0

ProductName에 작은 따옴표가 포함되어 있습니까? 이것은 나에게 괜찮아 보인다. –

+0

'Replace' 메소드를 사용하여 인용문을 이중 인용 부호로 묶으십시오. 즉,'DataBinder.Eval (e.Row.DataItem, "ProductName"). Replace (" '", "' '")' – Tim

+0

@Tim, 평균 \\ '. DataBinder.Eval (e.Row.DataItem, "ProductName") Replace (" '", "\\'")' –

답변

5

작은 따옴표로 \을 추가하는 것은 어떻습니까?

DataBinder.Eval(e.Row.DataItem, "ProductName").ToString.Replace("'", "\\'") 
+0

나는 또한 당신의 선택권을 시도했다, 그것의 일 fine.But는 제품의 이름에는 백 슬래시 같이 제품 이름이 '\\ Prd .It 준다 (당신은이 제품을 삭제하고 싶은가 당신을 확인하십시오 :'\ Prd) '\\ Prd –

0

사용 HttpUtility.HtmlEncode

대신 DataBinder.Eval(e.Row.DataItem, "ProductName")

의 당신은

HttpUtility.HtmlEncode(DataBinder.Eval(e.Row.DataItem, "ProductName").ToString())

+0

대신 작은 따옴표'''를 사용하고'HttpUtility.HtmlEncode'를 사용하면 클라이언트에게 표시되면'& # 39'로 바뀝니다. – atconway

0

당신이 문자열을 탈출하려고합니까 사용할 수 있습니까?

이스케이프 된 문자열이있는 경우 자바 스크립트로 이스케이프 처리를 취소 할 수 있습니다.

lnkDelete.Attributes.Add("onclick", "javascript:return confirm('Are you sure you want to delete this Product :' + unescape(\'" + escapedString + "\'))"); 
0

검색 프로젝트 용 자동 도구 중 하나에서 비슷한 작업을 수행했습니다. 여기에 당신이 시도 할 것입니다 :

protected void grdKeywords_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      LinkButton linkDeleteButton = e.Row.FindControl("lnkdel") as LinkButton; 
      Label lblGridKeyword = e.Row.FindControl("lblGridKeyword") as Label; 
      TextBox txtGridBox = e.Row.FindControl("txtGridKeyword") as TextBox; 

      if (lblGridKeyword != null) 
      { 
       if (lblGridKeyword.Text.Contains("'")) 
       { 
        lblGridKeyword.Text = lblGridKeyword.Text.Replace("'", "'"); 

       } 
      } 

      if (txtGridBox != null) 
      { 
       if (txtGridBox.Text.Contains("'")) 
       { 
        txtGridBox.Text = txtGridBox.Text.Replace("'", "`"); 
       } 
      } 

      if (txtGridBox == null) 
       linkDeleteButton.Attributes.Add("onclick", "javascript:return confirm('Are you sure about deleting keyword: " + lblGridKeyword.Text + " ?')"); 
      else if (lblGridKeyword == null) 
       linkDeleteButton.Attributes.Add("onclick", "javascript:return confirm('Are you sure about deleting keyword: " + txtGridBox.Text + " ?')"); 




     } 
    } 

lblGridKeyword는 작은 따옴표가 들어있는 데이터를 보유하고있는 레이블입니다. 나는 RowDataBound의 시간에 '을 사용하여 그것을 대체했다. 이것은 나를 위해 일했다.