如何从c#打开一个对话框(模态)

时间:2011-04-01 18:27:19

标签: c# javascript jquery modal-dialog jquery-dialog

我的javascript:

/* Modal */

function DefaultModal() {
    $(".ModalBox").dialog("open");
}

$(function () {
    // Modal.
    $(".ModalBox").dialog({
        autoOpen: false,
        height: 410,
        resizable: false,
        draggable: false,
        width: 602,
        modal: true,
        open: function (type, data) {
            // include modal into form
            $(this).parent().appendTo($("form:first"));
        },
        buttons: {
            "Confirm": function () {

            }
        },
        close: function () {
//clear all text.
            $(this).find(':text').val('');
        }
    });
});

我有两种方法来调用我的模态:

这一个完美无缺:

<li><a href="javascript:void(0)" onclick="DefaultModal();">ADD contact</a></li>

而这一个,不是。 我需要一个按钮,从我的临时表编辑到我的模态。


            <asp:GridView ID="gvContato" runat="server" AutoGenerateColumns="False" OnRowCommand="RunComm"
                    DataKeyNames="IDCliente" AllowPaging="True" PageSize="10" Width="600px">
                    <Columns>
                <asp:BoundField DataField="IDCliente" Visible="false" />
                        <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
                        <asp:BoundField DataField="Phone" HeaderText="Phone" SortExpression="Phone" />
                        <asp:BoundField DataField="Email" HeaderText="E-mail" SortExpression="Email" />

                        <asp:ButtonField ButtonType="Button" CommandName="Edit" Text="Edit">
                            <ItemStyle HorizontalAlign="Center" />
                        </asp:ButtonField>
                    </Columns>
                </asp:GridView>
protected void RunComm(object sender, GridViewCommandEventArgs e)
        {
            int IDSelecionado = (int)gvContato.DataKeys[Convert.ToInt32(e.CommandArgument)].Values[0];

            switch (e.CommandName)
            {
                case "Edit":
                    if (IDSelecionado > 0)
                    {
                        ScriptManager.RegisterClientScriptBlock(this.upModalContato, this.upModalContato.GetType(), "Modal", "DefaultModal();", true);
                    }
                    break;
            }

        }

我的编辑按钮正在执行此操作:

他打开我的对话框,但也将它显示在我的身体中(不仅是模态,还是我的gridview下面的DIV)。除此之外,如果我继续打开和关闭我的对话框(使用我的编辑按钮)而不保存信息,他会继续在我的所有文本框中创建逗号;就像你在javascript中做一些数组一样。

我不知道为什么!?

有什么想法吗?我不确定我是否能在这里理解,如果没有,请告诉我,我失踪了。

谢谢,问候。

编辑:

PS:我正在使用UpdatePanel!

EDIT2:TYPO

EDIT3:我为什么这样做?

我的目标:

  • 使用我的数据库中的数据(实际数据)加载一个gridview。
  • 在此gridview中输入从我的模态(临时数据)保存的临时数据。
  • 永久删除/编辑(在模态中)我的临时数据。
  • 暂时/编辑(在模态中),暂时是我的真实数据。

在所有更改之后,将最终数据(临时数据和实数数据)保存在我的数据库中。

为实现这一点,我将我的数据保存在我的视图状态(我知道很糟糕,但我现在没有想法)

按照@NerdFury解决方案,我做了这个:(这仍然无法正常工作!他打开模态,但不会在字段中加载数据。此代码也打开我的表(模态)我的html正文,包含数据。)

CSHARP:


        protected void btnEditModal_Click(object sender, EventArgs e)
        {
            this.ddlDepartamentoContato.SelectedIndex = 1;
            this.ddlCargoContato.SelectedIndex = 2;
            this.ckAprovadorContato.Checked = true;

        }

HTML:

                        <asp:TemplateField>
                            <ItemTemplate>
                                <asp:Button ID="btnEditModal" runat="server" Text="Edit" OnClientClick="DefaultModal();" CausesValidation="false" OnClick="btnEditModal_Click" />
                            </ItemTemplate>
                        </asp:TemplateField>

但我仍然遇到模态问题,对话框打开,但表格也出现在屏幕上。我在按钮事件中使用了一些静态数据,看它是否正常工作,并且他将这些数据加载到表中,但不是在模态中。

PS:我认为(至少我相信),问题是什么。

ASP:UpdatePanel中

如果我从我的代码中删除它,我将加载数据,一切都运行完美,但它使回发,我的模态几乎没有出现!他只是在我的屏幕上“眨眼”。

看看我的实际代码:

<asp:UpdatePanel ID="upModalContact" runat="server">
<ContentTemplate>
    <table>
        <tr>
            <td>
                <ul id="contatoModalButtonList">
                    <li><a href="javascript:void(0)" onclick="DefaultModal();">Add contact</a></li>
                </ul>
            </td>
        </tr>
        <tr>
            <td>
                <asp:GridView ID="gvContact" runat="server" AutoGenerateColumns="False" OnPageIndexChanging="gvContact_PageIndexChanging"
                    DataKeyNames="IDCliente" AllowPaging="True" PageSize="10" Width="600px">
                    <Columns>

                        <asp:BoundField DataField="IDClient" Visible="false" />
                        <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
                        <asp:BoundField DataField="Phone" HeaderText="Phone" SortExpression="Phone" />
                        <asp:BoundField DataField="Email" HeaderText="E-mail" SortExpression="Email" />

                        <asp:TemplateField>
                            <ItemTemplate>
                                <asp:Button ID="btnEditContactmodal" runat="server" Text="Edit" CausesValidation="false" OnClick="btnEditModal_Click" OnClientClick="DefaultModal();" />
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>
            </td>
        </tr>
    </table>

</ContentTemplate>
</asp:UpdatePanel>

并且

<table class="ModalBox" title="Contact">
<tr>
    <td colspan="2">
        <p class="validateTips"> Fields required (*).</p>
    </td>
</tr>
<tr>
    <td align="left" width="130px">
        <asp:Label Text="Name:" runat="server" ID="lblNameContact" />
    </td>
    <td>
        <asp:TextBox runat="server" ID="txtNameContact" CssClass="classNameContact" Width="400px" MaxLength="50" /> &nbsp; <label>*</label>
    </td>
</tr></table>

2 个答案:

答案 0 :(得分:2)

在您的标记中,您将CommandName设置为'Editar',然后在事件处理程序中,您正在检查CommandName'编辑'。

我没有看到您使用id值的任何地方,但这可能是因为您在最终确定数据/行为之前尝试让弹出窗口首先工作。但我的另一个建议是调查使用模板字段而不是按钮字段,而是使用按钮上的OnClientClick事件。

答案 1 :(得分:1)

我知道!!!

我使用2个更新面板来完成此任务。基于this link(谢谢先生!)

<div class="ModalContact" style="display:none;width:375px;" title="Contact">
<asp:UpdatePanel ID="upModalContact" runat="server">
    <ContentTemplate>
        <table>

        </table>
    </ContentTemplate>
</asp:UpdatePanel>

请务必注意,更新面板嵌套在对话框div中。此外,显示列表的GridView也在更新面板