0

我有一个简单的问题。

我有一个带有保存按钮的 FormView。单击按钮时,它会保存到数据库。

我添加了一个 EXT 消息框来确认用户是否要保存数据。当他在消息框是按钮上单击是时,它应该保存数据。

我找不到在 ext 中写“是”按钮逻辑的地方。

这是我的代码:

     <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

我猜你正在寻找这个:(可以放在 Sencha API 的任何 Demo-Box 中)

编辑 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>

编辑 1只需使用Ext.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();
 }

最后是将保存到数据库的方法:

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

我建议不要连接对话框的“是”按钮来执行回发。您应该等待消息框关闭,然后在用户单击“是”时调用回发功能。

例如:

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 回答