ASP.NET:サーバータグを使用して、C#またはVB.NETの式をJavascript関数に埋め込むことはできますか?

asp.net server-tags
ASP.NET:サーバータグを使用して、C#またはVB.NETの式をJavascript関数に埋め込むことはできますか?

すべてドロップダウンリストにバインドされているいくつかの値を含むSiteTypesという列挙型があります。 クライアント側では、このドロップダウンをチェックして、選択した値がそれらの列挙値の1つであるかどうかを確認する必要があります。 変更する必要がある場合に備えて、スクリプトで列挙型の値をハードコーディングしたくないので、列挙型自体から直接取得するためにサーバータグを使用したいと思います。 Conecptually、私はこれをしたいと思います:

function SiteIdChanged() {
    var x = "<%=SiteTypes.Employee %>";
}

私が今やっている方法は、特定の列挙値を返すコードビハインドで保護されたプロパティを作成し、これを実行しています:

function SiteIdChanged() {
    var x = "<%=EmployeeSiteTypeValue %>";
}

しかし、そのようなチェックを行う必要があるすべてのページに特別なプロパティを作成する必要があるため、私はそれが好きではありません。

ここで私がしたいことをする方法はありますか?

  1  0


ベストアンサー

「enum」が「public」とマークされている限り、最初のオプションを選択するだけで構いません。 値を取得するすべてのページにプロパティを配置する必要はありません。

このアプローチは、JavaScriptでサーバー側の値を書き出すための本当に簡単なソリューションです。

2


現在の実装が気に入らない場合は、 `PageMethod`を使用してドロップダウン選択を列挙値と比較することを検討します。 ほとんどのロジックサーバー側で実行できるため、このアプローチはおそらくよりクリーンになります。

「PageMethods」のチュートリアルを次に示します。+ http://blogs.microsoft.co.il/blogs/gilf/archive/2008/10/04/asp-net-ajax-pagemethods.aspx

2


ページをコンパイルまたは実行すると、「xxxは保護レベルのためアクセスできません」というエラーが表示されますか? 列挙型はデフォルトでパブリックですが、クラスはそうではありません。 私の推測では、ページのクラス内で列挙型を定義しており、 ‘public’アクセス修飾子で明示的にマークしているわけではありません。 明示的にパブリックとしてマークするか、クラスの外に移動して、何が起こるかを確認します。 多数のページで使用することを計画している場合は、プロジェクトのApp_Codeフォルダー内のファイルに列挙定義を固定する必要があります。

2


Enum.IsDefinedメソッドを使用して、ドロップダウンから選択した値が実際に列挙型の一部であるかどうかを確認できます。

Enum.IsDefined(typeof(MyEnum), myValue)

0


タイトルとURLをコピーしました