0

この問題を回避する方法は他にもあるので、これは大したことではないと思いますが、私はこれが可能だと思っていたので、答えについては本当に興味があります.

コード ビハインドでブール値を返すパブリック プロパティがあります。JavaScript 検証関数でこのサーバー変数にアクセスしたいのですが、これまでのところ、うまく取得できていません。

Public Property editMode() As Boolean
    Get
        If Cache("editMode") IsNot Nothing Then
            Return (DirectCast(Cache("editMode"), Boolean))
        Else
            Return False
        End If
    End Get
    Set(ByVal value As Boolean)
        Cache("editMode") = value
    End Set
End Property

function validateEdit()
{
    alert("editMode value is " + '<%#editMode()%>');
    if ('<%#editMode()%>'.toString() == "True")
    {
        alert("You are currently in edit mode. Please save or cancel changes.");
        return false;
    }
    return true;
}

これについてさまざまなバリエーションを試しましたが、常に False です。現在のコードでは、アラートは「editMode 値が False です」を返します。

私が使用する場合:

if ('<%#editMode()%>') ...

その後も常に False ですが、if 条件に入るため、動作は常に true であるかのようになります。

言及するもう1つのことは、私が見つけたほとんどのjavascript/serverタグのものは<%=editMode %>を使用するように言っているということですが、 # の代わりに = を使用するたびに例外が発生するため、これを行うことはできません:

「コントロールにコード ブロック (つまり <% ... %>) が含まれているため、Controls コレクションを変更できません。」

だから私は # を使ってこれを解決しました

    Page.Header.DataBind()
    Page.Form.DataBind()

ページ読み込みイベント ハンドラ内。

何か案は?前もって感謝します。:)

(あと、普段はC#を使っているので、無意識にVBの部分でおかしなことをしているかもしれませんので、その点もご指摘いただければ幸いです)

4

3 に答える 3

1

まず、これに変更してみてください:

<%=editMode()%>

それがそれであるかどうかはわかりませんが、傷つくことはありません。次に、最初にページを読み込んだときに編集モードですか? そのコードはサーバー側で実行され、結果をユーザーに返します。

ユーザーのページには、次のように表示されます。

function validateEdit()
{
    alert("editMode value is " + 'False');
    if ('False'.toString() == "True")
    {
        alert("You are currently in edit mode. Please save or cancel changes.");
        return false;
    }
    return true;
}

繰り返しますが、それが正しいかどうかはわかりませんが、javascript がサーバーに対して呼び出しを行っていないことを理解することが重要です。

于 2010-07-13T22:02:46.920 に答える
0

もう一つ。

文字列を別の文字列に変換していることに気付きます

'<%#editMode()%>'.toString() 

右?

あなたが欲しいのはこれだと思います

if ('<% =editMode.toString() %>'= 'True')...

またはさらに良い

if (<% =editMode.toString().ToLower() %>)...
于 2010-07-13T22:13:56.107 に答える
0

これは、エラーを修正するのに役立ちました。 「コントロールにコード ブロックが含まれているため、Controls コレクションを変更できません」

javascript 関数を head から body に移動すると、問題が解決します。この問題の原因はいくつかあるようですが、私の場合、最も可能性の高い原因は AjaxToolKit です。

于 2010-07-14T14:13:50.803 に答える