2008-08-20 110 views

回答

2

我真的不喜歡串在我的代碼,因爲它是不可能的重構。一個不錯的方法是使用Linq表達式。如果獲得通過一個模型作爲ViewData的,你可以使用下面的語句:

<%= ShowDropDownBox(viewData => viewData.Name); %> 
... 

public static string ShowDropDownList<T>(this HtmlHelper html, Expression<Action<T>> property) 
{ 
    var body = action.Body as MethodCallExpression; 
    if (body == null) 
     throw new InvalidOperationException("Expression must be a method call."); 
    if (body.Object != action.Parameters[0]) 
     throw new InvalidOperationException("Method call must target lambda argument."); 
    string propertyName = body.Method.Name; 
    string typeName = typeof(T).Name; 

    // now you can call the original method 
    html.Select(propertyName, ...); 
} 

我知道原來的解決方案是執行速度快,但我認爲這是一個更清潔。

希望這會有所幫助!

+0

我最後一次嘗試refacoring它沒有更新我的剃鬚刀意見 – BlackTigerX 2011-04-09 17:03:30

相關問題