OnclientClick 이벤트를 프로그래밍 방식으로 변경하고 호출하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1875233

문제

재생 목록이 포함 된 ListView가 있습니다. 사용자가 앨범을 편집하려면 편집 링크를 클릭하여 재생 목록에 노래를 제거하거나 추가 할 수 있습니다. 사용자가 원래 재생 목록을 유지하면서 새 재생 목록을 저장하려면 저장 버튼을 클릭합니다. 다음은 다음과 같습니다.

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

사용자가 저장을 클릭하고 이름을 변경 한 경우 실제로 이름을 저장하려는 확인을 원합니다.

현재, 내 코드에 다음과 같은 것을 넣으면 스크립트가 두 번째 클릭까지 등록되지 않고 등록 된 스크립트가 등록 된 상태로 등록 된 상태에서 이름을 변경하고 경고 스크립트가 등록되었음을 의미합니다. 이전에는 확인 대신 경고를 표시합니다. 코드는 다음과 같습니다.

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 + "?');";
}

또한 반환 False를 추가하려고 시도하여 포스트 백이 수행되지 않도록 시도했지만 확인을 클릭하면 실제로 아무것도하지 않습니다.

도움이 되었습니까?

해결책

Slaks가 말한 것은 정확합니다. 페이지 수명주기를 오해하고 있습니다. JavaScript 코드는 페이지에 제자리에 있어야합니다. ~ 전에 저장을 클릭합니다. 설명대로 예제에서 사용자는 제목/이름을 변경하고 클릭을 저장 한 후 JavaScript 코드가 버튼에 적용됩니다. 두 번째로 저장을 클릭하면 이전 예제의 유효성 검사 결과가 팝업됩니다.

옵션 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" />

Code-Behind에서 양식 필드 (앨범 이름 등)가 바인딩되면 다음을 실행하십시오.

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

위의 정규 표현식은 처음부터 시작된 것을 제외하고 모든 입력에 유효합니다. 사용자가 앨범 이름의 텍스트를 변경하면 저장 버튼이 올바르게 유효합니다. 그렇지 않은 경우, 유효성 검사기가 시작하여 페이지에 메시지를 변경해야한다는 메시지를 표시합니다.

그런 다음 처리합니다 OnClick 값을 저장하기 위해서만 저장 버튼의 이벤트는 페이지가 검증 된 경우에만 발사되므로 다음과 같습니다.

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

또한 원하는대로 확인 상자를 사용할 수도 있습니다.

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

위는 잘 작동해야합니다. 대체 접근 방식은 다음과 같습니다.

옵션 2 : ClientSide 유효성 검사 기능을 사용하십시오

완전히 클라이언트 측면에서 검증을하고 싶다면 훨씬 더 복잡 할 수 있습니다. 당신이해야 할 일은 완전히 clientside 유효성 검사 기능을 등록하는 것입니다.

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

}

도움이 되었기를 바랍니다. 내가 방금 빨리 함께 던졌을 때 위의 구문 오류가있을 수 있습니다 ..

다른 팁

그만큼 OnClientClick 속성은 URI가 아닌 JavaScript 문자열입니다. 따라서 시작해서는 안됩니다 javascript:.

처리하기 위해 confirm 올바르게 쓰십시오 OnClientClick = "return confirm('Are you sure?');";

또한 ASP.NET 페이지 모델을 오해하고 있습니다.

C# Code-Behind 이벤트 처리기는 실행됩니다 ~ 후에 사용자는 버튼을 클릭합니다 ~ 후에 그만큼 OnClientClick 콜백. JavaScript로 모든 것을 작성하고 OnClientClick.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top