无法通过MasterPage访问webform aspx中的hiddenfield值。

问题描述 投票:1回答:1

我正试图访问一个隐藏的领域 hidJsonHolder 价值从我 masterpage 在我的webform aspx页面中设置的,但不能访问它的主页面。codebehind.

我怎么才能让这个工作呢?

看起来很简单,但不知道为什么不能用......隐藏的领域。hidJsonHolder 值为空...

我已经在webform aspx中试过同样的代码,但没有主页面,工作正常......

Mp cs

public partial class MasterPage : System.Web.UI.MasterPage
{
    protected void Page_Load(object sender, EventArgs e)
    {
        HiddenField hid1 = (HiddenField)ContentPlaceHolder1.FindControl("hidJsonHolder");
        if (hid1 != null)
        {
            Response.Write(hid1.Value);
        }
    }
}

Mp aspx

<html>
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js" type="text/javascript"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js" type="text/javascript"></script>
    <script src="DDScript.js" type="text/javascript"></script>
    <style>
        DIV.ContainerCenter {
            width: 700px;
            margin-left: auto;
            margin-right: auto;
        }

            DIV.ContainerCenter TD {
                width: 150px;
                margin-right: 30px;
                text-align: center;
            }

        DIV.connectedSortable {
            text-align: left;
            border: 1px solid black;
            float: left;
            margin-right: 30px;
            overflow: auto;
            height: 200px;
            width: 300px;
            white-space: nowrap;
        }

            DIV.connectedSortable DIV {
                margin: 0 5px 2px 5px;
                cursor: default;
                white-space: nowrap;
            }

        DIV.selectedItem {
            background-color: Blue;
            color: White;
        }
    </style>

    <asp:ContentPlaceHolder ID="head" runat="server">
    </asp:ContentPlaceHolder>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
            </asp:ContentPlaceHolder>
        </div>
    </form>
</body>
</html>

Webform cs

   protected void Page_Load(object sender, EventArgs e)
    {
        HiddenField hid1 = (HiddenField)FindControl("hidJsonHolder");
        if (hid1 != null)
        {
            Response.Write(hid1.Value);
        }
    }
    protected void btnFinal_Click(object sender, EventArgs e)
    {
        JavaScriptSerializer jsSer = new JavaScriptSerializer();
        object obj = jsSer.DeserializeObject(hidJsonHolder.Value);

        if (obj != null)
        {
            Movie[] listMovie = jsSer.ConvertToType<Movie[]>(obj);
            foreach (Movie p in listMovie)
            {
                string pattern = @"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*";
                Regex re = new Regex(pattern);
                if (p.ToString() != null)
                {
                    MatchCollection matches = re.Matches(p.ToString());
                    if (matches.Count > 0)
                    {
                        for (int i = 0; i < matches.Count; i++)
                        {
                            Response.Write(matches[i] + "; ");
                        }
                    }
                }
            }
        }
    }
    protected string GetJsonData()
    {
        List<Movie> listOfMovies = new List<Movie>();
        string query = "SELECT * FROM Country ORDER BY NAME DESC LIMIT 15;";
        string constr = ConfigurationManager.ConnectionStrings["cn"].ConnectionString;
        using (MySqlConnection con = new MySqlConnection(constr))
        {
            using (MySqlCommand cmd = new MySqlCommand(query))
            {
                cmd.CommandType = CommandType.Text;
                cmd.Connection = con;
                con.Open();
                using (MySqlDataReader sdr = cmd.ExecuteReader())
                {
                    while (sdr.Read())
                    {
                        Movie item = new Movie();
                        item.id = Convert.ToInt32(sdr["Capital"]);
                        item.name = sdr["Name"].ToString();
                        listOfMovies.Add(item);
                    }
                }
            }
            con.Close();

            List<Movie> someList = (from item in listOfMovies
                                    select new Movie { id = item.id, name = item.name }).ToList<Movie>();

            JavaScriptSerializer jsSer = new JavaScriptSerializer();
            string str = jsSer.Serialize(someList);
            return str;
        }
    }

    public class Movie
    {
        public string name { get; set; }
        public int id { get; set; }

        public override string ToString()
        {
            return string.Format("[id={0};name={1}]\n", id, name);
        }
    }

Webform aspx

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server">
    <script type="text/javascript">
        $(function () {
            var $json = <% =GetJsonData() %>;
            pageload($json);
        });
    </script>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
    <div class="ContainerCenter">
        <table>
            <tr>
                <td>Source</td>
                <td>Destination</td>
            </tr>
        </table>
        <div id="list1" class="connectedSortable">
        </div>
        <div id="list2" class="connectedSortable">
        </div>
    </div>
    <div style="clear: both;"></div>
    <asp:Button Text="GetLength" runat="server"
        ID="btnFinal"
        OnClick="btnFinal_Click"
        OnClientClick="CreateJson()" />
    <br />
    <asp:HiddenField runat="server" ID="hidJsonHolder" />
</asp:Content>
json master-pages
1个回答
1
投票

使用 "查看来源" 在你的浏览器中,你应该看到客户端的id不匹配。

尝试添加 ClientIDMode="Static" 在您的隐藏字段上。

请看 netframework-4.8 以获取关于客户端id如何生成的详细信息。

另一个选择是通过 view=netframework-4.8

始终使用ASP.NET生成的实际客户端ID。

© www.soinside.com 2019 - 2024. All rights reserved.