비슷한 질문이 다른 곳에서 요청되었지만 특정 상황에서 응답이 작동하지 않는 것 같습니다.
가 나는 aspx 페이지에 숨겨진 필드가 있습니다 : 나는 코드 숨김에서이 필드에 액세스하기 위해 노력하고있어aspx.cs 코드 숨김에서 정적 메서드에서 비 정적 메서드를 호출하는 방법
<asp:HiddenField ID="dataReceiver" runat="server" Value="" />
. VS2010에 의해 자동으로 생성되는 기본 클래스 내에서 참조해야하는 것 같습니다. 새로운 수업을 만들 수 없기 때문에 다음과 같이 해 보았습니다. 이 라인 10에서 오류가 발생
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}
은 : "개체 참조가 개체의 인스턴스로 설정되지 않았습니다."
줄 14도 "_default def = new _Default(). Data1();"이라고 입력 해 보았습니다. 그러나 컴파일러는 다음과 같은 오류로이를 거부합니다. "암시 적으로 'void'를 'WebApplication6._Default'로 변환 할 수 없습니다."
이 작업을 수행 할 수있는 방법이 있습니까, 아니면 완전히 다른 접근 방식이 필요합니까?
[편집] 아래의 대린의 답변은이 문제를 해결했지만 정보를 적용하는 방법을 파악하는 데 다소 시간이 걸렸습니다. 나는 누군가가 나중에 비슷한 문제를 읽는 경우 해결책의 세부 사항을 분명히해야한다고 생각했다.
WebMethod는 인스턴스 메서드를 호출 할 수 없지만 "runat"특성에 관계없이 페이지의 요소에 액세스 할 수있는 것 같지 않지만 호출하는 JavaScript 메서드에 값을 반환 할 수 있습니다. 값은 "success"또는 "failure"함수로 전달되는 "result"라는 로컬 변수로 JavaScript에서 액세스 할 수 있습니다. 새 인스턴스를 작성하는 이유는
<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;
}
이 컨트롤이있는'.aspx' 페이지의'@ Page' 지시문은 어떻게 생겼습니까? – Oded
Page_Load 메서드에서 Data1을 직접 호출하지 않는 이유는 무엇입니까? –
@ThomasLevesque - Data1을 호출하기 위해 클래스의 인스턴스가 필요하기 때문입니다. – JonH