Аналогичный вопрос задавался в другом месте, но, похоже, ответ не работает в моей конкретной ситуации.
У меня есть скрытое поле на странице aspx:
<asp:HiddenField ID="dataReceiver" runat="server" Value="" />
Я пытаюсь получить доступ к этому полю из кода. Кажется, что я должен ссылаться на него из класса по умолчанию, который автоматически генерируется VS2010. Поскольку я не могу создать новый класс, я попробовал следующее.
1public partial class _Default : System.Web.UI.Page
2{
3 protected void Page_Load(object sender, EventArgs e)
4 {
5 Data2();
6 MessageBox.Show(dataReceiver.Value);
7 }
8 public void Data1()
9 {
10 dataReceiver.Value = "123456";
11 }
12 public static void Data2()
13 {
14 _Default def = new _Default();
15 def.Data1();
16 }
17}
Это приводит к ошибке в строке 10: «Ссылка на объект не установлена на экземпляр объекта».
Я также попытался ввести строку 14 как "_Default def = new _Default (). Data1 ();" но это отклоняется компилятором с ошибкой: «Не удается неявно преобразовать тип« void »в« WebApplication6._Default »»
Есть ли способ заставить это работать, или мне нужен совершенно другой подход?
[EDIT]
Ответ Дарина ниже решил это для меня, но мне потребовалось немного времени, чтобы понять, как применить информацию. Я подумал, что должен уточнить детали решения на тот случай, если кто-нибудь прочтет это позже с похожей проблемой.
Хотя WebMethod не может вызвать метод экземпляра и, похоже, не может получить доступ к элементам страницы независимо от их атрибута «runat», он может вернуть значение методу JavaScript, вызывающему его. Это значение будет доступно в JavaScript как локальная переменная с именем «result», которая передается в функции «success» или «fail».
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<asp:ScriptManager id="scriptManager1" runat="server" EnablePageMethods= "true" />
<asp:HiddenField ID="dataReceiver" runat="server" Value="789" />
</asp:Content>
//Javascript
function callServer() {
PageMethods.Data2($("#MainContent_dataReceiver").attr("value").toString(), success, failure);
function success(result, userContext, methodName) { alert(result + " . " + userContext + " . " + methodName); }
function failure(result, userContext, methodName) { alert(result + " . " + userContext + " . " + methodName); }
}
//C# Code Behind
[WebMethod]
public static string Data2(string value)
{
value = "101112";
return value;
}