0

簡単な質問があります。

保存ボタン付きのFormViewがあります。ボタンをクリックすると、データベースに保存されます。

ユーザーがデータを保存するかどうかを確認するためのEXTメッセージボックスを追加しました。メッセージボックスの[はい]ボタンをクリックすると、データが保存されます。

内線のyesボタンロジックをどこに書くかがわかりません。

これが私のコードです:

     <asp:FormView ID="myform" runat="server" DataSourceID="mydatasource" DefaultMode="Edit"  DataKeyNames="Id" >

      <EditItemTemplate>                                              
       <asp:TextBox ID="myText" runat="server" TextMode="MultiLine" ClientIDMode="Static"
        Text='<%#Bind("xx") %>' />                                                  
       <ext:Button ID="btn_Update" runat="server" AutoPostBack="false" CausesValidation="false"  CommandName="Update" Text="Speichern" StyleSpec="float: left; margin-left:10px;">                                                                               <DirectEvents>
<Click OnEvent="btnUpdateClick"></Click>
 </DirectEvents>
                                                              </ext:Button> 



    <script type="text/javascript">

    function showResult(btn) 
    {
            Ext.example.msg('Button Click', 'You clicked the {0} button', btn);
        };
        function showResultText(btn, text) 
        {
            Ext.example.msg('Button Click', 'You clicked the {0} button and entered the text "{1}".', btn, text);
        }

        var showResult = function (btn) {
            Ext.Msg.notify("Button Click", "You clicked the " + btn + " button");
        };

        var showResultText = function (btn, text) {
            Ext.Msg.notify("Button Click", "You clicked the " + btn + 'button and entered the text "' + text + '".');
        };


</script>



protected void btnUpdateClick(object sender, DirectEventArgs e)
        {
           X.Msg.Confirm("Confirm", "Are you sure you want to save?", new JFunction { Fn = "showResult" }).Show();

        }
4

3 に答える 3

2

私はあなたがこれを探していると思います:(SenchaAPIの任意のデモボックスに配置できます)

編集2

私はあなたがDirectを使用していることを完全に監視しました。あなたはそのようなことを言及する必要があります。DirectEventを使用する理由はありますか?私はそれをテストできませんでしたが、これはどうですか(ラッピング関数は不要かもしれませんが、通常のExtJSハンドラーは最初の引数としてボタン参照を取得します)

<form runat="server">
        <ext:ResourceManager runat="server" />

        <script runat="server">
            [DirectMethod]
            public void SetTimeStamp(string field)
            {
                // do your saving
            }
        </script>
        <ext:TextField ID="TextField" runat="server" FieldLabel="Label"/>
        <ext:Button ID="Button" runat="server" Text="Click Me" Icon="Lightning">
            <Listeners>
                <Click Handler="function() {Ext.Msg.show({title: 'Save?', msg: 'Do you want to save the data?:', buttons: Ext.Msg.YESNO,fn: function(btn){ if(btn == 'yes') {App.direct.SetTimeStamp(#{TextField}.getValue());}}})}" />
            </Listeners>
        </ext:Button>
</form>

編集1Ext.Ajax.request()を使用するだけです

Ext.Msg.show({
        title: 'Save?', 
        msg: 'Do you want to save the data?:', 
        buttons: Ext.Msg.YESNO,
        fn: function(btn, text){
              Ext.Ajax.request({
                url: 'yourUrl',
                method: 'POST',
                params: {
                    // your params
                },
                success: function() {
                    console.log('success');
                },
                failure: function() {
                    console.log('woops');
                }
            });
        }
});

フォームの例が削除されました

于 2012-11-22T12:52:52.533 に答える
1

皆様のご支援に感謝します。あなたの答えを見つけました。ここに載せておきます。誰かに役立つかもしれません。

まず、ボタンコード、Isupload="true"である必要があります

ext:Button ID="btn_Update" runat="server" AutoPostBack="false" CausesValidation="false"
CommandName="Update" Text="Save" StyleSpec="float: left; margin-left: 10px;"
AutoScroll="False">
<DirectEvents>
<Click OnEvent="btnUpdateClick" IsUpload="true" AutoDataBind="true">
</Click>
</DirectEvents>
</ext:Button>

aspxのボタンイベントで:

protected void btnUpdateClick(object sender, DirectEventArgs e)
{
        MessageBoxButtonConfig buttonYes = new MessageBoxButtonConfig();
        buttonYes.Text = "Yes";
        buttonYes.Handler = "Ext.net.DirectMethods.ClickedYES();";

        MessageBoxButtonConfig buttonNo = new MessageBoxButtonConfig();
        buttonNo.Text = "NO";
        //  buttonNo.Handler = "Ext.net.DirectMethods.ClickedNO();";

        MessageBoxButtonsConfig yesNoButtons = new MessageBoxButtonsConfig();
        yesNoButtons.Yes = buttonYes;
        yesNoButtons.No = buttonNo;

        X.Msg.Confirm("Save Changes", "Would you like to Save?", yesNoButtons).Show();
 }

最後に、データベースに保存するYesメソッド:

[DirectMethod]
public void ClickedYES()
{
      Formview.UpdateItem(false);
      Formview.DataBind();
}
于 2012-11-23T12:41:31.377 に答える
0

ダイアログのyesボタンを配線する代わりに、ポストバックを実行することをお勧めします。メッセージボックスが閉じるのを待ってから、ユーザーが[はい]をクリックした場合はポストバック機能を呼び出す必要があります。

例えば:

Ext.Msg.prompt('SaveChange', 'Would you like to save the changes?:', function(btn, text){
    if (btn == 'yes'){
         __doPostBack('btnSubmit','OnClick');
    }
});

btnSubmitをボタンの名前に置き換えます。

上記の解決策が私の推奨されるアプローチですが、代わりに、次のようにしてjqueryを使用することもできます。

$('btnSubmit').trigger('click'); 

ソース:http ://dev.sencha.com/playpen/docs/output/Ext.MessageBox.html

于 2012-11-22T12:38:05.780 に答える