2013-03-28 3 views
3

В соответствии с моими предыдущими question, я хочу получить значение скрытого поля ввода из дочерней страницы codebehind.Доступ к значению скрытого поля на Masterpage из codebehind

Я пробовал HtmlInputHidden hdnID = (HtmlInputHidden)Page.Master.FindControl("ctl00_hdnField");, но получил «нулевое» значение.

enter image description here

Отрывок из Masterpage является:

<head runat="server"> 
    <title> 
     <asp:ContentPlaceHolder ID="TitleContent" runat="server"></asp:ContentPlaceHolder> 
     <asp:Literal ID="Literal2" runat="server" Text=" : Logistics Management" /> 
    </title> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

    <link href="~/css/styles.css" rel="stylesheet" type="text/css" /> 

    <asp:ContentPlaceHolder ID="ScriptCssContent" runat="server"> 
    </asp:ContentPlaceHolder> 

</head> 
<body> 

<form id="form1" runat="server"> 
    ...... 
    ...... 
    ...... 
     <div id="container"> 
     .... 
     .... 
     .... 
       <div id="content" style="z-index:0;"> 
       <asp:HiddenField ID="hdnField" runat="server" Value=""/> 
       .... 
       .... 
       .... 
         <asp:ContentPlaceHolder ID="MainContent" runat="server"> 

         </asp:ContentPlaceHolder> 
      </div> 
     </div> 
</form> 

На моей странице ASPX ребенка, у меня есть этот Javascript блок:

window.onload = function() { 
    var newDate = new Date(); 
    var hidField = document.getElementById("ctl00_hdnField"); 

    if (hidField != null) 
     hidField.value = newDate.toLocaleString(); 
} 

Когда я "Add Watch" в

document.getElementById("ctl00_hdnField")

Значение правильное.

Вопрос: Как получить доступ к значению внутри hdnField control, from codebehind?

+0

Вы пытаетесь найти элемент управления с помощью codebehind главной страницы или кодовой записи дочерней страницы? –

+0

Код дочерней страницы – Csharp

+0

Просто создайте свойство readonly с именем 'Master()' на своей дочерней странице, которое возвращает экземпляр главной страницы и ссылается на его дочернюю страницу, например 'Master.hdnField' –

ответ

5

Так изменить ОТ

HtmlInputHidden hdnID = (HtmlInputHidden)Page.Master.FindControl("ctl00_hdnField");

К

HiddenField hdnID = (HiddenField)Page.Master.FindControl("hdnField");

Это просто отливка вещь - уведомление HtmlInputHidden изменено на HiddenField. Вам также не нужна часть ct100_ - это просто так, что элемент, визуализируемый HTML, имеет уникальный идентификатор.

Элемент управления на вашей странице является элементом управления asp.net, а не общим элементом управления HTML.

Вы бы использовали HtmlInputHidden, если вы поместили общий код <input type="hidden" /> в свой HTML.

+1

Невероятно !!! Это был большой жирный мозговой пердит на моей стороне. Большое спасибо за вашу помощь. – Csharp

+0

Простая ошибка :) – Darren

+2

Кстати, если вы планируете использовать любой Javascript для взаимодействия с элементами формы и с использованием .net 3.5 или выше, то также установите свойство ClientIDMode = Static', это предотвратит .net от добавляя в свои удостоверения всевозможные глупости. – Darren

2

Вы должны создать свойство на главной странице, которое обертывает HiddenField.

public String HdnFieldValue 
{ 
get 
{ 
    return hidField.Value; 
} 
set 
{ 
    hidField.Value = value; 
} 
} 

А в коде страницы позади вы можете получить к нему доступ, как это:

((YourCustomMaster)Page.Master).HdnFieldValue 

Если что-то не ясно, пожалуйста, спросите меня.

1

Я не думаю, что вам нужно префикс ID скрытое поле с ctl00_, просто используйте нормальный ID:

(HtmlInputHidden)Page.Master.FindControl("hdnField"); 
+0

: Невозможно передать объект типа «System.Web.UI.WebControls.HiddenField» для ввода «System.Web.UI.HtmlControls.HtmlInputHidden». – Csharp

+0

Я просто использовал «HtmlInputHidden», потому что это то, что у вас было на вершине вашего собственного примера. Очевидно, что вы должны бросать на HiddenField, как предлагает Даррен. – Netricity

0

использовать что-то вроде:

if (Page.Master.FindControl("hdnField") != null) 
{ 
    String myValue = (HtmlInputHidden)Page.Master.FindControl("hdnField").value; 
} 
Смежные вопросы