2010-04-13 37 views
5

我想了解Eval()如何用於特定目的。我正在研究一個我不太瞭解的項目,我需要閱讀一些數據並將它們放在下拉列表中。這些數據已經被讀取並顯示在ItemTemplate中。我注意到有讀取使用Eval()方法。 喜歡的東西:ASP .NET - Eval()背後發生了什麼?

<ItemTemplate> 
    <a href="...=<%# Eval("foo") %>></a> 
</ItemTemplate> 

我需要知道評估和演示從爲了得到這些數據,發現在那裏我應該爲我的下拉列表閱讀!但我真的不明白它是如何工作的! 我知道Eval()在運行時評估數據綁定表達式,但您認爲我應該看看哪些內容?

謝謝

回答

2

Eval是一種快捷方式。這是一個實際的方法調用,但不像Bind,這更像是一個代碼片段。

關於Data-Binding Expressions的MSDN文章應該給你一個非常好的概述。

簡而言之,解析器在讀取頁面時調用DataBinder.Eval,並將上下文中的當前DataItem和您指定的字符串一起傳入。這很像從DataReader讀取列。

上下文中的DataItem取決於發生的情況。例如,在一個GridView中,這可能就像一個DataTable中的DataRow對象,它與GridView綁定,但它可以是任何對象,因爲它通過反射工作。在DataRow的情況下,Eval(「Foo」)會嘗試從DataRow的Foo列提取數據。

你現在可以看到這可能會變壞。如果DataRow停止包含Foo列,那麼Eval調用將慘敗,但直到運行時纔會失敗,因爲沒有涉及強類型/名稱檢查。