2009-12-09 7 views
1

재생 목록을 포함하는 ListView가 있습니다. 사용자가 앨범을 편집하고 싶다면 편집 링크를 클릭하면 노래를 삭제하거나 재생 목록에 추가 할 수 있습니다. 사용자가 원래 재생 목록을 유지하면서 새 재생 목록을 저장하려면 다른 이름으로 저장 버튼을 클릭합니다. 수행해야 할 작업은 다음과 같습니다.프로그래밍 방식으로 OnClientClick 이벤트를 변경하고 호출하는 방법?

사용자가 다른 이름으로 저장을 클릭하고 이름을 변경하지 않은 경우 이름을 변경해야한다는 경고를 표시하려고합니다.

사용자가 다른 이름으로 저장을 클릭하고 이름을 변경 한 경우 실제로 저장하려고한다는 확인 메시지를 표시하려고합니다.

현재, 코드 뒤에 다음과 같은 코드를 삽입하면 스크립트가 두 번째 클릭까지 등록되지 않고 등록 된 스크립트가 등록 된 상태로 유지된다는 것을 의미합니다. 경고 스크립트가 전에 등록 된 경우 확인 대신 경고가 표시됩니다. 여기에 코드입니다 : 나는 또한 포스트 백을 할 것 false로 반환을 추가하는 시도,하지만 난 그렇게하면 내가 확인에 확인을 클릭하면, 그것은 실제로 아무것도하지 않습니다하지 않습니다

if (newname == oldname) 
{ 
    btnSaveAs.OnClientClick = 
    "javascript:alert('Save As requires you to change the name of the playlist. Please 
    change the name and try again.');"; 
} 
else 
{ 
    btnSaveAs.OnClientClick = "javascript:confirm('Are you sure you want to save the 
    playlist" + newname + "?');"; 
} 

.

+0

Xaisoft, 나는 아래의 대답에 많은 노력을했습니다. 정확하고 유용하다고 생각되면 답변으로 표시하도록하십시오. –

+0

죄송합니다. 아직 테스트 할 기회가 없었습니다. 나는 조금 안에 들어갈 것이다. 내가하는대로 곧 표시하겠습니다. – Xaisoft

답변

5

올바른 SLAK이 맞는지, 페이지 수명주기를 오해하고있는 것입니다. 자바 스크립트 코드는 의 자리에 있어야 전에 저장을 클릭하십시오. 설명 된 예제에서 사용자는 제목/이름을 변경하고 다른 이름으로 저장을 클릭 한 후 자바 스크립트 코드가 버튼에 적용됩니다. 두 번째로 다른 이름으로 저장을 클릭하면 이전 예제의 유효성 검사 결과가 나타납니다.

옵션 1 : 발리 제어

에게이 문제를 해결하는 가장 간단한 방법을 사용하여이 값을 비교하는 RegularExpressionValidator 컨트롤을 사용하는 것입니다.

마크 업 조각 : 코드 숨김 양식 필드 한 번에

<asp:Label ID="lblName" runat="server" Text="Name: " /> 
<asp:TextBox ID="txtName" runat="server" /> 
<asp:RegularExpressionvalidator ID="valName" runat="server" ControlToValidate="txtName" ErrorMessage="You must change the name before saving" Display="Dynamic" /> 

<asp:Button ID="btnSaveAs" runat="server" OnClick="btnSaveAs_Click" Text="Save As" CausesValidation="True" /> 

(앨범 명 등) 바인딩이 실행 :

valName.ValidationExpression = string.Format("[^{0}]", Regex.Escape(lblName.Text)); 

위의 정규 표현식이 유효합니다 거기에 무엇이 있었는지를 제외한 모든 입력에 대해. 사용자가 앨범 이름의 텍스트를 변경하면 저장 버튼이 올바르게 적용됩니다. 그렇지 않으면 유효성 검사기가 시작되어 페이지에서 메시지를 변경해야한다는 메시지를 표시합니다.당신이 원하는대로

protected void btnSaveAs_Click(object sender, EventArgs e) 
{ 
    if (Page.IsValid) 
    { 
     //do you save actions as needed 
    } 
} 

또한 계속하여 귀하의 확인 상자를 사용할 수 있습니다 페이지가 확인 된 경우에만 발생하기 때문에

그런 다음, 단지 값을 저장하기위한 저장 버튼의 OnClick 이벤트를 처리 하는 중입니다.

protected void Page_Load(object sender, EventArgs e) 
{ 
    btnSave.OnClientClick = "return confirm('Are you sure you wish to change the name?');"; 
} 

위의 내용은 정상적으로 작동합니다.

옵션 2 : 또 다른 접근 방법이 아래에 나열되어 완전히 클라이언트 측 유효성 검사를하고 싶었다 경우 클라이언트 측 유효성 검사 기능

를 사용하여, 당신은하지만 훨씬 더 복잡 할 것입니다 수 있습니다. 당신이해야 할 일은 완벽한 클라이언트 검증 기능을 등록하는 것입니다. Page_PreRender 동안 뒤에 코드에서

:이 도움이

protected void Page_PreRender(object sender, EventArgs e) 
{ 
    //define the script 
    string script = @" 

    function validateAlbumName(oldName, textBoxId) { 

     //get the textbox and its new name 
     var newName = document.GetElementById(textBoxId).value; 

     //compare the values 
     if (newName === oldName) { 
      //if the name hasn't changed, 
      alert('You must change the name of the album'); 
      return false; 
     } 

     return confirm ('Are you sure you want to save the playlist ' + newName); 
    } 

    "; 

    //register the client script, so that it is available during the first page render 
    Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "SaveAsValidation", script); 

    //add the on client click event, which will validate the form fields on click the first time. 
    btnSaveAs.OnClickClick = string.Format("return validateAlbumName('{0}','{1}');", txtAlbumName.Text, txtAlbumName.ClientID); 

} 

희망. 위의 몇 가지 구문 오류가있을 수 있습니다. 그냥 빨리 던져 버렸습니다.

+1

위 정규 표현식에 결함이있을 수 있으므로 정규 표현식 전문가가 아닙니다. 개념은 작동 할 것이다. 다른 옵션은 asp : CompareValidator를 숨겨진 필드와 함께 사용하여 이전 값과 새 값을 추적하는 것입니다. –

+0

정규식이 잘못되었습니다. 원래 문자열의 문자로 시작하지 않는 모든 문자열과 일치합니다. – SLaks

+0

ListView의 ItemTemplate 인 TextBox에 액세스하려고해도 여전히 작동합니까? – Xaisoft

1

OnClientClick 속성은 URI가 아닌 자바 스크립트 문자열입니다. 따라서 javascript:으로 시작하면 안됩니다.

는 제대로 confirm 처리 또한, 당신은 ASP.Net 페이지 모델을 오해하고 OnClientClick = "return confirm('Are you sure?');";

를 작성합니다.

귀하의 C# 코드 숨김 이벤트 핸들러는 사용자가 버튼을OnClientClick 콜백 후 를 클릭를 실행합니다. 그 모든 것을 자바 스크립트로 작성하고 OnClientClick으로 전화해야합니다.

+0

예를 들어 "OnClientClick에서 호출"이라는 의미로 자세히 설명해 주실 수 있습니까? 감사. – Xaisoft

관련 문제