2010-06-10 3 views
8

으로 변환됩니다. 참고 : 대개이 질문은 이중 질문이지만 명확한 대답을 찾지 못했기 때문에 어쨌든 묻습니다.ASP.NET 작은 따옴표는 '

ASP.NET에서 CheckBox의 onclick 이벤트에 JavaScript를 추가하고 싶습니다. 나는이에 사건을 단순화했습니다 다음과 같이

<asp:CheckBox ID="TestCheckBox" runat="server" onclick="alert('test');" Text="Test" /> 

결과 HTML은 다음과 같습니다

특히 날 귀찮게 무엇
<input id="MainContainer_TestCheckBox" type="checkbox" name="ctl00$MainContainer$TestCheckBox" onclick="alert(&#39;test&#39;);" /><label for="MainContainer_TestCheckBox">Test</label> 

은 '으로 변환됩니다'자동으로 '작은 따옴표 그 & # 39; '. 마크 업에서 onclick을 생략하고 Page_Load에 지정하면 HTML과 완전히 동일한 결과가 표시됩니다.

protected void Page_Load(object sender, EventArgs e) 
{ 
    this.TestCheckBox.Attributes["onclick"] = "alert('test');"; 
} 

누구에게 무슨 일이 일어나는가에 대한 단서가 있습니까? 또는 그것을 고치거나 피하는 방법은 무엇입니까?

+2

왜 중요한가요? 그것들은 필요하지 않지만 유효한 HTML이고 잘 동작합니다. –

답변

1

이 내가 값이 인코딩 된 HTML없이 사용자 지정 컨트롤의 속성을 주입 할 수 있었다 방법입니다,이 질문을 찾습니다. 이것은 버튼 누름 동작을 확인하기 위해 비동기 함수를 호출하는 버튼의 예입니다.

키는 HTMLEncode 단계를 비활성화하는 플래그가있는 writer.AddAttribute()를 사용하는 것입니다. 이것은 또한 당신이 사용하고있는 asp.net의 버전에 의존하는 것으로 보인다. 이것은 .net 4.6.1에서 작동합니다.

public class ConfirmationLinkButton : LinkButton 
{ 
    protected override void AddAttributesToRender(HtmlTextWriter writer) 
    { 
     base.AddAttributesToRender(writer); 
     string script = "confirmAsync('" + ConfirmationMessage.Replace("'", "\\'") + "', " + Callback() + ");" + 
         "return false;"; 
     writer.AddAttribute(HtmlTextWriterAttribute.Onclick, script, false); 
    } 

    private string Callback() 
    { 
     return "(data) => { if (data===true) {" + Page.ClientScript.GetPostBackEventReference(this, "") + "}}"; 
    } 

    public string ConfirmationMessage { get; set; } 
} 
1

우선 asp 체크 박스 컨트롤은 onclick을 유효한 속성으로 사용하지 않습니다. 당신이 값을 서버 측이 필요하지 않은 경우, 당신은 단지 ASP 확인란 대신 보통의 체크 박스를 넣을 수 있습니다

1 :

그래서 당신은 두 가지를 할 수 있습니다.

2- 값 서버 측이 필요하면 runat = "server"속성을 추가하고 코드에서이를 참조 할 수 있도록 확인란을 지정하십시오.

<input type="checkbox" id="chk1" onclick="alert('hello');" runat="server" /> 
7

프로젝트를 .NET 3.5에서 .NET 4.0으로 마이그레이션 할 때 속성 값에 작은 따옴표가있는 것과 동일한 문제가있었습니다. 속성 값의 모든 작은 따옴표를 &39;으로 변환합니다. 그래서 .NET 3.5로 돌아갔습니다.

그것은 .NET 4.0입니다. 이 문제에 대한 자세한 내용은 here을 참조하십시오.

+0

감사! 그것은 그것을 조금 더 지 웁니다. –

0

데이터 바인딩이 수행 된 후 컨트롤이 업데이트되는 최근에이 문제가 발생했습니다. 수정이 포함 된 중계기의 OnItemDatabound 서버 이벤트 동안 onchange를 자바 스크립트를 추가했다 : 나는 같은 문제에 직면했다

protected void rptTarifDetails_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item) 
    { TextBox proposedPrice = e.Item.FindControl("txtProposedUnitSell") as TextBox; 
     proposedPrice.Attributes.Add("onchange", "CalcCommissionSingleLine(this,'None','" + ((Repeater)sender).ClientID + "', false, " + rowCount.Value + ")"); 
0

. 마지막으로 많은 내용을 검색하여 페이지의 콘텐츠 유형을 application/xhtml + xm으로 변경하여 해결했습니다. 경우 다른 사람에

<%@ Page Language="C#" AutoEventWireup="true" EnableViewState="true" Debug="true" ContentType="application/xhtml+xm" %> 

희망,이 정보는 당신을 도울 것입니다 ..

관련 문제