目前,我正在爲MVC編寫自定義控件,從而擴展了HtmlHelper
。 我正在與Expression<T>
在這裏工作,但我相對較新。這是使用Expression <Func <string,string >>的正確方法嗎?
儘管我的代碼正在工作,但我只想驗證這是否正確。
我正在渲染一個控件,我可以以流暢的方式向渲染的控件添加屬性。 將屬性添加到我的控制的方法是使用下面的代碼:
.Attributes(style => "width: 100%;")
當我想在我的渲染控制使用多個屬性,這種方法可以多次調用:
.Attributes(style => "width: 100%;")
.Attributes(id => "renderedControl")
爲了呈現屬性,我正在查看包含該屬性的表達式。
下面是我用添加屬性的方法簽名:
public IGridConstructor<TModel> Attributes(Expression<Func<string, string>> expression)
所以,我傳遞一個Expression
包含Func<string, string>
。 函數的輸入參數是屬性的名稱,而輸出參數是屬於此屬性的值。
這並不意味着extression:
style => "width: 100%;"
應該呈現一個屬性:style="width: 100%"
現在,我已經實現了用下面的代碼:
private void AddAttribute(Expression<Func<string, string>> expression)
{
var propertyName = expression.Parameters[0].ToString();
var propertyValue = expression.Compile()(string.Empty);
GridAttributes.Add(propertyName, propertyValue);
}
這是一個正確的做法呢?我不喜歡這裏的[0]
。
任何幫助,高度讚賞。
編譯表達式是昂貴的。最好不要經常這樣做。我寧願解釋表達式樹(它將是一個常量)。 – usr 2014-11-05 11:42:10
好的,我不知道。介意給我一個關於如何解釋樹的小樣本? – Complexity 2014-11-05 11:42:48
看起來你對這個有點過度設計,一個簡單的鍵值對發生了什麼問題:'.AddAttribute(「style」,「width:100%」)'或'.Attributes(new {style =「寬度:100%「,id =」something「})'? – 2014-11-05 11:44:57