Как открыть диалог (модальный) из c # - PullRequest
1 голос
/ 01 апреля 2011

Мой 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:Я использую UpdatePanel!

EDIT2: TYPO

EDIT3: Почему я это делаю?

Моя цель:

  • Загрузить один 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 ]

2 голосов
/ 01 апреля 2011

В вашей разметке вы устанавливаете CommandName на 'Editar', затем в обработчике событий вы проверяете на CommandName 'Редактировать'.

Я не вижу нигдевы используете значение идентификатора, но это может быть связано с тем, что вы пытаетесь заставить всплывающее окно работать сначала, прежде чем завершить работу с данными / поведением.Но другим моим предложением было бы изучить использование поля шаблона вместо поля кнопки и использовать вместо него событие OnClientClick для кнопки.

1 голос
/ 06 апреля 2011

Я ЭТО !!!

Я использую 2 панели обновления, чтобы выполнить это.Исходя из этой ссылки (Спасибо, сэр!)

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

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

Важно отметить, что панели обновления вложены в диалоговое окно div.А также GridView для отображения списка также находится в панели обновления

...