【问题标题】:How to programmatically set properties of a Web control placed in a Panel controlled by a ModalPopupExtender如何以编程方式设置放置在由 ModalPopupExtender 控制的面板中的 Web 控件的属性
【发布时间】:2012-03-07 11:06:44
【问题描述】:

我有一个 ASP.NET Web 窗体应用程序。在我的 GridView OverviewGridView 中有一个按钮 dlButton,onclick 会触发一个控制面板 dlModalPanel 的 ModalPopupExtender DisplayLinkMPE。在 dlButton 单击时,我想在 dlModalPanel 弹出时显示一些文本(取决于 GridView 的行)。我的 aspx 中有这段代码:

<asp:Button ID="dlButton" runat="server" CommandName="DisplayLink" CommandArgument="<%# TryCast(Container,GridViewRow).RowIndex %>" Text="Copy Link" />
<ajax:ModalPopupExtender ID="DisplayLinkMPE" runat="server" TargetControlID="dlButton" PopupControlID="dlModalPanel" CancelControlID="btnCancel" BackgroundCssClass="modalBackground" />

 <asp:ScriptManager ID="ModalDialogScriptManager" runat="server" />
    <asp:Panel ID="dlModalPanel" runat="server" Style="display: none;">
        <table>
            <tr align="center">
                <td colspan="2">
                    <asp:Label ID="lblDownloadLink" runat="server" ForeColor="White">Copy Download Link:</asp:Label>
                    <asp:Label ID="txtDownloadLink" runat="server"></asp:Label>
                </td>
            </tr>
            <tr>
                <td align="right">
                    <asp:Button ID="btnCancel" runat="server" Text="Cancel" />
                </td>
            </tr>
        </table>
    </asp:Panel>

在我的 dlButton 后面的代码中,点击由 OverviewGridView RowCommand 事件处理程序处理,该处理程序在 Page is postback 后执行:

Dim selectedRowIndex As Integer = Convert.ToInt32(e.CommandArgument)

Dim displayLinkMPE As AjaxControlToolkit.ModalPopupExtender = OverviewGridView.Rows(selectedRowIndex).FindControl("displayLinkMPE")

//Get itemUrl

txtDownloadLink.Text = itemUrl
displayLinkMPE.Show()

一切都正确显示,但 txtDownloadLink 中的 Text 仍然为空。如何更新此文本?谢谢

我也懂 C#,所以欢迎两种语言的答案!

【问题讨论】:

    标签: asp.net panel modalpopupextender


    【解决方案1】:

    查看 Matt Berseth Check it here 的这篇出色的帖子,我认为您必须使用更新面板并将模态代码包装在其中,然后手动更新更新面板

    upatePanel1.Update();
    
    1. 查看此link 以获取另一个示例

    编辑检查完全工作的例子。您必须手动更新模式弹出更新面板以查看文本框的任何更改。 ASPX

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        <link rel="Stylesheet" type="text/css" href="css/StyleSheet.css" />
        <style type="text/css">
            .modal
            {
                background-color: Aqua;
                width: 150px;
                height: 100px;
                padding: 6px;
            }
            .modalBackground
            {
                background-color: #CCCCFF;
                filter: alpha(opacity=40);
                opacity: 0.5;
            }
        </style>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:UpdatePanel ID="upnGrid" runat="server">
                <ContentTemplate>
                    <asp:ScriptManager ID="ScriptManager1" runat="server">
                    </asp:ScriptManager>
                    <asp:GridView CssClass=".Grid-blue" ID="GridView1" runat="server" AllowPaging="True"
                        AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="ProductID" DataSourceID="LinqDataSource1">
                        <Columns>
                            <asp:BoundField DataField="ProductID" HeaderText="ProductID" InsertVisible="False"
                                ReadOnly="True" SortExpression="ProductID" />
                            <asp:BoundField DataField="ProductName" HeaderText="ProductName" SortExpression="ProductName" />
                            <asp:BoundField DataField="SupplierID" HeaderText="SupplierID" SortExpression="SupplierID" />
                            <asp:BoundField DataField="CategoryID" HeaderText="CategoryID" SortExpression="CategoryID" />
                            <asp:BoundField DataField="QuantityPerUnit" HeaderText="QuantityPerUnit" SortExpression="QuantityPerUnit" />
                            <asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice" SortExpression="UnitPrice" />
                            <asp:BoundField DataField="UnitsInStock" HeaderText="UnitsInStock" SortExpression="UnitsInStock" />
                            <asp:BoundField DataField="UnitsOnOrder" HeaderText="UnitsOnOrder" SortExpression="UnitsOnOrder" />
                            <asp:BoundField DataField="ReorderLevel" HeaderText="ReorderLevel" SortExpression="ReorderLevel" />
                            <asp:CheckBoxField DataField="Discontinued" HeaderText="Discontinued" SortExpression="Discontinued" />
                            <asp:TemplateField>
                                <ItemTemplate>
                                    <asp:LinkButton ID="lbEdit" runat="server" OnClick="lbEdit_Click">Edit</asp:LinkButton>
                                </ItemTemplate>
                            </asp:TemplateField>
                        </Columns>
                    </asp:GridView>
                </ContentTemplate>
            </asp:UpdatePanel>
            <asp:LinqDataSource ID="LinqDataSource1" runat="server" ContextTypeName="DataClassesDataContext"
                EntityTypeName="" TableName="Products">
            </asp:LinqDataSource>
        </div>
        <ajaxToolkit:ModalPopupExtender BackgroundCssClass="modalBackground" ID="mpeDetails"
            CancelControlID="btnClosePopup" TargetControlID="btnShowModal" PopupControlID="pnlDetails"
            runat="server">
        </ajaxToolkit:ModalPopupExtender>
        <asp:Button ID="btnShowModal" runat="server" Text="Button" Style="display: none" />
        <asp:Panel ID="pnlDetails" CssClass="modal" runat="server" Style="display: none">
            <asp:UpdatePanel ID="upnDetails" runat="server" UpdateMode="Conditional">
                <ContentTemplate>
                    <label>
                        ID:</label><asp:TextBox ID="txtID" runat="server"></asp:TextBox>
                    <br />
                    <label>
                        Name:</label>
                    <asp:TextBox ID="txtName" runat="server"></asp:TextBox>
                    <br />
                </ContentTemplate>
            </asp:UpdatePanel>
            <div>
                <asp:Button ID="btnClosePopup" runat="server" Text="Cancel" /></div>
        </asp:Panel>
        </form>
    </body>
    </html>
    

    .CS

       protected void lbEdit_Click(object sender, EventArgs e)
    {
        LinkButton lbTemp = (LinkButton)sender;
    
        if (lbTemp != null)
        {
            GridViewRow grow =(GridViewRow) lbTemp.NamingContainer;
            int id = Convert.ToInt32(GridView1.DataKeys[grow.RowIndex][0].ToString());
            mpeDetails.Show();
            txtID.Text = id.ToString();
            upnDetails.Update();
        }
    }
    

    【讨论】:

    • 谢谢,我点击了链接,但它看起来像是垃圾邮件网站。我也尝试搜索 Matt Berseth 并尝试浏览某个类别,但它只是提供广告
    • 对我有用吗?只有他的现场演示和代码已关闭。它不是垃圾网站,你可以通过他网站上显示的代码来了解。
    • 谢谢,我会看看你的第二个例子。我不知道为什么我从 mathberseth.com 询问的每个页面都将我重定向到 pagesinxt.com/?dn=mattberseth2.com&otherparameters
    • 我按照您提供的示例进行操作,但回发时遇到了一些麻烦...
    • 好的...只是一个小问题,关闭按钮不会关闭弹出窗口
    猜你喜欢
    • 2011-11-16
    • 2011-01-02
    • 2011-03-25
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    • 2011-01-03
    • 2019-03-27
    • 1970-01-01
    相关资源
    最近更新 更多