1

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

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

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

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

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

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

4

4 に答える 4

2

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

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

于 2011-10-26T19:36:15.140 に答える
2

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

于 2011-10-26T20:11:29.993 に答える
2

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

ここにチュートリアルがありPageMethodsます:
http://blogs.microsoft.co.il/blogs/gilf/archive/2008/10/04/asp-net-ajax-pagemethods.aspx

于 2011-10-26T19:38:02.997 に答える
0

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

Enum.IsDefined(typeof(MyEnum), myValue)

http://msdn.microsoft.com/en-us/library/system.enum.isdefined.aspx

于 2011-10-26T19:39:36.223 に答える