1

我的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;
            }

        }

我的编辑按钮正在这样做:

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

我不知道为什么!?

有任何想法吗?我不确定我是否在这里让自己可以理解,如果没有,请告诉我我失踪了。

感谢和问候。

编辑:

PS:我正在使用更新面板!

EDIT2:错字

EDIT3:我为什么要这样做?

我的目标:

  • 使用我的数据库中的数据(真实数据)加载一个 gridview。
  • 放入从我的模态(临时数据)保存的这个gridview临时数据。
  • 永久排除/编辑(在模式中)我的临时数据。
  • 暂时排除/编辑(在模式中)我的真实数据。

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

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

遵循@NerdFury解决方案,我做了这个:(这仍然不能按我的需要工作!他打开了模式,但没有加载字段中的数据。这段代码也可以在我的 html 正文中打开我的表(模式),使用数据。)

夏普:


        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:更新面板

如果我从我的代码中删除它,我将加载数据并且一切正常,但是它会进行回发,并且我的模态几乎不会出现!他只是在我的屏幕上“眨眼”。

看看我的实际代码:

<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>
4

2 回答 2

2

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

I don't see anywhere that you are using the id value, but that might be because you are trying to get the popup to work first before finalizing the data/behavior. But my other suggestion would be to look into using a template field instead of a buttonfield and use the OnClientClick event on a button instead.

于 2011-04-01T19:39:03.933 回答
1

I DID IT!!!

i use 2 update panels to accomplish this. Based on this link (Thank you sir!)

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

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

It is important to note that the Update Panels are nested inside the dialog div. And also the GridView to display the list is also within an Update Panel

于 2011-04-06T12:45:38.427 回答