2015-07-28 14 views
1

我有一些代碼過於複雜我如何「重構=>引入一個變量」在一個ascx Eval代碼中?

visible='<%#((String.IsNullOrEmpty(Eval("IDLingua").ToString()) [...]%>' runat="server"> 

而且我想介紹一個變量來保存String.IsNullOrEmpty(EVAL(「IDLingua」)的結果。toString()方法操作。

我能做到這一點無論在ASCX碼或後面的代碼,但是研究幾個小時後,我仍然不清楚地瞭解如何做到這一點

回答

1

你不能這樣的對象分配給簡單的變量。

visible='<%#((String.IsNullOrEmpty(Eval("IDLingua").ToString()) 
[...]%>' runat="server"> 

一般來說,我不建議在aspx視圖上處理數據。在我看來,如果你在代碼後面或者更早的時候(在從數據庫獲取數據和在代碼後面準備視圖之間)處理它會更好。視圖應該是最小的,只能顯示數據,而不是處理它。

無論如何...我想你的代碼與Eval存在於一箇中繼器或另一個控件使用數據綁定。

你應該能夠定義額外的隱藏字段控制並保存表達式。

<asp:HiddenField id="hidTmp" runat="server" value='<%# String.IsNullOrEmpty(Eval("IDLingua").ToString() %>' /> 

但請記住它只能在<ItemTemplate>標籤內工作。然後你可以使用hidTmp作爲變量。

另一種方法可以使用OnItemDataBound方法,用後面的代碼(其中引入變量是沒有問題的):

https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.onitemdatabound(v=vs.110).aspx

1

這看起來像,應該是從UI的邏輯。你可以一個新的屬性添加到您的對象可見性,包含邏輯

visible='<%#Eval("IsVisible")%>' runat="server"> 

還是後面在代碼中創建一個函數,並調用它

visible='<%#IsVisible(Eval("IDLingua"))%>' runat="server"> 
+0

這已經是一個很好的解決方案,但我可以直接訪問IDLingua代碼在後面?我想盡可能地從Controller中分離出View。如果後面的代碼可以看到我將解決的IDLingua。 – Revious

+0

@Revious在第二個例子中,IDLingua作爲參數傳遞,函數不需要知道值來自哪裏。在第一個例子中,這個類負責處理所有的邏輯,所以只有這個類知道IDLingua。 –

+0

但我如何從後面的代碼訪問IDLingua? (我發佈的所有代碼都在一箇中繼器內) – Revious

相關問題