无法从内容页面在asp.net主页控件中设置标签文本

时间:2017-07-04 13:07:10

标签: c# jquery asp.net popup bootstrap-modal

我正在尝试更改主页中标签的文本,这是在模态内部,而是从内容页面我尝试设置文本。 这是我的母版页:

<%@ Master Language="C#" AutoEventWireup="true" 
CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>

<!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>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1 maximum-
    scale=1, user-scalable=no" />
    <link href="../Content/bootstrap.min.css" rel="stylesheet" />
    <link href="../Style/StyleSheet.css" rel="stylesheet" />
    <link href="../Content/font-awesome.min.css" rel="stylesheet" />
    <link href="http://fonts.googleapis.com/css?
    family=Lato:300,400,700,300italic,400italic,700italic" rel="stylesheet" 
    type="text/css" />
    <link href="https://cdnjs.cloudflare.com/ajax/libs/jquery-footable/0.1.0/css/footable.min.css" rel="stylesheet" type="text/css" />
    <script src="../Scripts/jquery-1.9.1.min.js"></script>
    <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
    </asp:ContentPlaceHolder>
</head>
    <body>
    <div id="header">
        <form id="Form1" runat="server">
            <header>
            </header>
            <div class="container-fluid" id="body">
                <asp:ContentPlaceHolder ID="ContentPlaceHolder2" runat="server">
                </asp:ContentPlaceHolder>
                <div class="modal fade" id="myModal">
                    <div class="modal-dialog">
                        <div class="modal-content" style="width: 400px;margin: 0 auto;">
                            <div class="modal-header" runat="server">
                                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                                    <span aria-hidden="true">&times;</span></button>
                                <h4 class="modal-title"><asp:Label ID="lblMasterMessage" runat="server" Text="Label"></asp:Label> </h4>
                            </div>
                            <div class="modal-body">
                                <asp:Label ID="lblMasterbodyMessage" runat="server" Text="gh" />
                            </div>
                            <div class="modal-footer">
                                <button type="button" class="btn btn-primary" data-dismiss="modal">Close</button>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            <footer class="panel-footer white">
                <div class="row">
                </div>
            </footer>
        </form>
    </div>
    <script src="../Scripts/bootstrap.min.js"></script>
    </body>
</html>
子页面中的

脚本打开模态:

<script type="text/javascript">
     function openModal(message) {
          $('#myModal').modal('show');
      }
 </script>
子页面后面的代码调用脚本并更改modalpopup中的标签文本

    ScriptManager.RegisterStartupScript(this, this.GetType(), "LaunchServerSide", "$(function() { openModal(); });", true);
    Label lblMaster = (Label)Master.FindControl("lblMasterbodyMessage");
    string message = "something";
    lblMaster.Text = message;

我还通过在母版页中设置属性来尝试第二种方法,但弹出窗口中的文本没有得到更新。任何帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

最佳方法是在主页面中提供一个get / set属性,该属性将接受值并将其分配给label value属性。

  

母版页

public partial class MasterPage : System.Web.UI.MasterPage
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    public string MasterBodyMessage // you can use some meaningfull name over here.
    {
        get { return this.lblMasterbodyMessage.Text; }
        set { this.lblMasterbodyMessage.Text = value; }
    }  
}
  

儿童页面

ScriptManager.RegisterStartupScript(this, this.GetType(), "LaunchServerSide", "$(function() { openModal(); });", true);
var master = this.Master as MasterPage;
if (master != null)
{
    master.MasterBodyMessage = "Some Meaningful Message!!!";
}

否则,您可以使用javascript / jQuery将消息添加到母版页中的标签中。为此,您需要修改以下更改。

  

HTML Aspx页面

<div class="modal-content" style="width: 400px;margin: 0 auto;">
    <div class="modal-header">
        <button aria-label="Close" class="close" data-dismiss="modal" type="button"><span aria-hidden="true">&times;</span></button>
        <h4 class="modal-title"><label id="lblMasterMessage"></label></h4>
    </div>
    <div class="modal-body">
        <label id="lblMasterbodyMessage"></label>
    </div>
    <div class="modal-footer">
        <button class="btn btn-primary" data-dismiss="modal" type="button">Close</button>
    </div>
</div>
  

页面背后的代码

string message = "Some Meaningful Message!!!";
ScriptManager.RegisterStartupScript(this, this.GetType(), "LaunchServerSide", "openModal('"+ message +"');", true);
  

jQuery脚本

<script type="text/javascript">
     function openModal(message) {
          $('#myModal').modal('show');
         $('#lblMasterbodyMessage').html(message);
      }
 </script>

答案 1 :(得分:0)

在MasterType指令的TypeName属性中指定主页类名。

<%@ MasterType TypeName="MasterPageClassName" %>

现在您可以访问您的公共属性this.Master.propertyname

还可以尝试将代码从页面加载事件移动到页面的PreRenderComplete事件。

那将解决你的问题