2009-07-01 46 views
0

我對.Net開發有點新鮮,現在在Java中工作了一段時間。我有一個aspx頁面,我們需要外部化一些字符串以使其更加靈活。Aspx Property Interpolation

如果我有一個表的地方,並有只是一個字符串坐在asp標籤外,我可以讓

<th> Specific Foo String </th> 

成爲

<th> <%= Strings.foo %> </th> 

取代它,一切都很好,問題我碰到的是你如何做這種插值上的asp標籤屬性

我試過改變

<asp:Label runat="server" ID="lblFoo" Text="Specific Foo String Entry" /> 

<asp:Label runat="server" ID="lblFoo" Text='<%= Strings.foo %> Entry' /> 

<asp:Label runat="server" ID="lblFoo" Text='<%#Eval("Strings.foo") %> Entry' /> 

但既不工作。我在aspx文件中不可能做到這一點,我知道我可以通過在後面的代碼中重寫它們的屬性來模擬它,但這是我不願意處理的開銷水平。

感謝

回答

2

我認爲你要做到這一點:在你的代碼

<asp:Label runat="server" id="label1" Text='<%# Strings.Foo + " Entry"%>' /> 

那麼後面(最有可能在你的onPageLoad),你需要調用

if(!Page.IsPostBack) Page.DataBind(); 

您需謹慎然而由於在像文本框這樣的控件上調用DataBind,或者由於後面的代碼中的邏輯而可能已經更改的任何標籤將使用綁定值覆蓋它們的值。檢查你沒有回帖可以幫助解決這個問題,但仍然存在問題。

另請注意,我必須將「Entry」文本移動到綁定語句中。如果它被放置在最後外「%>」,那麼綁定不工作,它會吐出:

<%#Strings.foo%>項

0

在你這樣做頁面的代碼隱藏:

lblFoo.Text = Strings.foo + " Entry"; 

一個好地方,把這個代碼將在重寫OnLoad方式,但僅僅是一個建議,因爲我不熟悉您的應用程序和頁面的生命週期需求。

如果你想做到這一切的aspx頁面,然後簡單地做到這一點:

<span><%= Strings.foo %> Entry</span> 

Label呈現爲一個跨度進不去。

+0

感謝您的回覆,雖然這可以工作在一個簡單的情況下,我有一個更復雜的案件(中繼器頭和whatnot)的大型應用程序。我希望有一種方法可以做到這一點,而不必瞭解每個頁面的生命週期需求並找到最佳實施策略。 在學術上比實際上更多,可以在aspx級別執行屬性插值,還是僅爲後面的代碼保留? 但是,再次感謝您的答案。 – ihumanable 2009-07-01 19:16:36

0

如果你的目標是字符串HTML table,那麼您可以創建一個ListViewGridViewDataBind。這樣可以節省寫出所有屬性的麻煩,並且還會爲數據生成正確的表標記。

不知道更多關於您的數據,我無法提供詳細的代碼片段。