0

他の場所でも同様の質問がありましたが、私の特定の状況では答えがうまくいかないようです。
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' に暗黙的に変換できません」

これを機能させる方法はありますか、それともまったく別のアプローチが必要ですか?

[編集] 以下の Darin の回答でこれは解決しましたが、情報を適用する方法を理解するのに少し時間がかかりました。後で誰かが同様の問題でこれを読んだ場合に備えて、解決策の詳細を明確にする必要があると思いました。
WebMethod はインスタンス メソッドを呼び出すことができず、「runat」属性に関係なくページの要素にアクセスできないように見えますが、呼び出し元の JavaScript メソッドに値を返すことができます。値は、「成功」または「失敗」関数に渡される「結果」と呼ばれるローカル変数として 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;
}
4

3 に答える 3

2

ASP.NETのPageMethodからインスタンスフィールドにアクセスすることはできません。これは、ここで達成しようとしていることだと思います。それがそれであり、あなたがそれについてできることはあまりありません。したがって、私がお勧めするのは、単にページメソッドに非表示フィールドの値を引数としてとらせることです。

public static void Data2(string value)
{
    ... do something with the value of the hidden field
}

ここで、pageメソッドの呼び出し元に、ページのコンテキスト内にあるため、必要な値を指定させます。

于 2011-11-18T20:46:38.043 に答える
1

ここで何が起こっているのか、つまり何を達成しようとしているのかは不明です。おそらくパラメーターなしのコンストラクターが有用な値に_Default設定されていないため、エラーが発生しています。dataReceiver

静的メソッドにするData2() 必要がある理由はありますか? 論理的に何を呼び出す必要がありData1()ますか?あるインスタンスを呼び出す必要があるため、新しいインスタンスを作成してそれを呼び出すだけでよいと判断するだけではいけData1()ません。呼び出しの論理的な目的を解決します。それは、どのインスタンスを呼び出す必要があるか、またはこれが実際に開始するインスタンス メソッドであるかどうかを示す必要があります。_DefaultData1()

于 2011-11-18T20:44:17.777 に答える
0

新しいインスタンスを作成する理由: _Default def = new _Default();、アクセスするには を使用しますdataReceiver.Value。コントロールが指定されている場合、runat=serverコード ビハインド内からコントロールにアクセスできることを意味します。

なぜData1インスタンスメソッドなのですか? もっと情報が必要です。

于 2011-11-18T20:43:56.590 に答える