簡體   English   中英

ASP.NET:可以使用服務器標簽將C#或VB.NET表達式嵌入到Javascript函數中嗎?

[英]ASP.NET: Can you use server tags to embed C# or VB.NET expressions into a Javascript function?

我有一個名為SiteTypes的枚舉,其中包含幾個都綁定到下拉列表的值。 在客戶端,我需要檢查此下拉列表,以查看所選值是否為這些枚舉值之一。 我不想在腳本中對枚舉的值進行硬編碼以防萬一需要更改,因此我想使用服務器標簽直接從枚舉本身獲取它。 從概念上講,我想這樣做:

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

我現在的操作方式是在代碼背后創建一個受保護的屬性,該屬性返回該特定的枚舉值,並正在執行此操作:

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

不過,我不喜歡這樣,因為我必須在需要進行此類檢查的每個頁面上創建一個特殊屬性。

有什么辦法可以在這里做我想要的嗎?

只要您的enum被標記為public ,您就可以選擇第一個選項。 無需在要從中檢索值的每個頁面上放置屬性。

該方法實際上是在JavaScript中寫出服務器端值的最簡單解決方案。

如果您不喜歡當前的實現,則可以考慮使用PageMethod將下拉選擇項與枚舉值進行比較。 由於您可以在大多數邏輯服務器端進行操作,因此這種方法可能更簡潔。

這是有關PageMethods的教程:
http://blogs.microsoft.co.il/blogs/gilf/archive/2008/10/04/asp-net-ajax-pagemethods.aspx

編譯或運行頁面時,是否收到“由於其保護級別而無法訪問xxx”的錯誤? 默認情況下,枚舉是公共​​的,而類不是。 我的猜測是您已經在頁面的類中定義了枚舉,而沒有使用“ public”訪問修飾符對其進行明確標記。 明確將其標記為公開或將其移出課堂,然后看看會發生什么。 如果打算在許多頁面上使用它,則應將枚舉定義粘貼在項目的App_Code文件夾中的文件中。

您可以使用Enum.IsDefined方法很好地告訴您從下拉列表中選擇的值是否實際上是枚舉的一部分。

Enum.IsDefined(typeof(MyEnum), myValue)

http://msdn.microsoft.com/zh-CN/library/system.enum.isdefined.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM