3

私は C# で ASP.NET Web フォーム アプリケーションに取り組んでいます。クライアント側の Javascript を (OnClientClick 属性を使用して) 実行し、クライアント側のコードが true を返す場合は (OnClick を使用して) サーバー側のコードを実行する必要があるボタンがあります。jQuery-ui 確認ダイアログでこれを何度も行ったことがありますが、今回はクライアント側のコードが確認ダイアログではなく、機能していません。サーバー側 (OnClick) イベントはトリガーされません私は明示的にtrueを返していますが。

問題のクライアント側コードは次のとおりです (alert() 呼び出しで正しい値が返されることを確認しました)。

<script type="text/javascript">
    //Function to hide edit fields
    function hideEditFields(retVal) {
        //Hide all edit divs
        var editName = document.getElementsByClassName("editField");
        for (i = 0; i < editName.length; i++) {
            editName[i].style.display = 'none';
        }
        //Show all view divs
        var viewName = document.getElementsByClassName("viewField");
        for (i = 0; i < viewName.length; i++) {
            viewName[i].style.display = 'block';
        }

        //Make investigated & corrective action checkboxes non-highlighted
        $('<%=cbInvestigatedY.ClientID%>').removeClass("editable");
        $('<%=cbInvestigatedN.ClientID%>').removeClass("editable");
        $('<%=cbCorrectiveY.ClientID%>').removeClass("editable");
        $('<%=cbCorrectiveN.ClientID%>').removeClass("editable");

        //Show edit button
        var editButton = document.getElementById("editButton");
        editButton.style.display = 'block';
        //Hide save button
        var saveButton = document.getElementById("saveButton");
        saveButton.style.display = 'none';

        //alert("returning " + retVal);
        return retVal;
    }
</script>

この関数を呼び出すボタンは次のとおりです。

<asp:Button ID="btnSaveChanges" runat="server" OnClientClick="return 
    hideEditFields(true);" OnClick="btnSubmit_Click" Text="Save Changes" />

私はこれを使って試しましたがUseSubmitBehavior="true"、違いはないようです。Javascript コンソールにエラーは表示されず、Javascript コードは本来の動作をしています。サーバー側のメソッドを呼び出していないだけです。

送信ボタンが ASP.NET によって (ビュー ソースで) レンダリングされる方法は次のとおりです。

<input type="submit" name="ctl00$MainContent$btnSaveChanges" value="Save Changes"
    onclick="return hideEditFields(true);WebForm_DoPostBackWithOptions(new
    WebForm_PostBackOptions(&quot;ctl00$MainContent$btnSaveChanges&quot;, &quot;&quot;,
    true, &quot;&quot;, &quot;&quot;, false, false))"
    id="ctl00_MainContent_btnSaveChanges" />
4

3 に答える 3

4

returnクライアント クリックで呼び出しからを削除してみてください。次のように関数を呼び出す必要があると思いますonclientclick

<asp:Button ID="btnSaveChanges" runat="server" OnClientClick="hideEditFields('true');"  Text="Save Changes" onclick="btnSubmit_Click" />
于 2013-06-25T15:56:37.117 に答える
1

本当の問題は、サーバー側のメソッド実行されていたが、フォームのテキスト ボックスやその他のコントロールに入力された新しい値とフォームの元の値 (隠しフィールドとして保存されている) を比較して保存するため、何もしていないことでした。それらが変更された場合。しかし、IsPostBack のチェックでフォームに入力されたコードを含めないという初歩的な間違いを犯していたので (そして、私はよく知っています! )、比較は常に等しくなり、何も変わっていませんでした。コンテンツが変更されたときに ASP.NET が TextBox コントロールの元の値を送信するのはなぜですか? を参照してください。詳細については。

于 2013-06-25T17:10:35.950 に答える
1

クライアントのクリックで、戻り値を true に設定します。

btnTest.OnClientClick = 
    "window.open('" + URL + "'); 
    return true;";
于 2015-04-10T06:50:05.963 に答える