有没有办法让我这个扩展方法的intellisensible参数?LINQ扩展方法帮助寻求II
目前,我可以通过工具提示来了解参数(在控制器操作方法中)是什么,但希望自信地使用IntelliSense输入“安全”的参数名称。无论如何,事不宜迟,方法,其次是用法:
public static string Script<T>(this HtmlHelper html,
Expression<Action<T>> action) where T:Controller
{
var call = action.Body as MethodCallExpression;
if (call != null)
{
// paramDic - to be used later for routevalues
var paramDic = new Dictionary<string, object>();
string actionName = call.Method.Name;
var methodParams = call.Method.GetParameters();
if (methodParams.Any())
{
for (int index = 0; index < methodParams.Length; index++)
{
ParameterInfo parameterInfo = methodParams[index];
Expression expression = call.Arguments[index];
object objValue;
var expressionConst = expression as ConstantExpression;
if(expressionConst!=null)
{
objValue = expressionConst.Value;
}
else
{
Expression<Func<object>> expressionConstOther =
Expression.Lambda<Func<object>>(
Expression.Convert(expression, typeof(object)),
new ParameterExpression[0]);
objValue = expressionConstOther.Compile()();
}
paramDic.Add(parameterInfo.Name, objValue);
}
}
string controllerName = typeof(T).Name;
if (controllerName.EndsWith("Controller", StringComparison.OrdinalIgnoreCase))
{
controllerName = controllerName.Remove(controllerName.Length - 10, 10);
}
var routeValues = new RouteValueDictionary(paramDic);
var urlHelper = new UrlHelper(html.ViewContext.RequestContext);
var url = urlHelper.Action(actionName, controllerName, routeValues);
const string linkFormat = "<script type=\"text/javascript\" src=\"{0}\"></script>";
string link = string.Format(linkFormat, url);
return link;
}
return null;
}
用途(其中FundShareholderController
是我的控制器和x.JsFile()
是其上的操作方法。):
<%=Html.Script<FundShareholderController>(x => x.JsFile("CreateInvestorBookingJsFile", 0))%>
我希望这是有道理的。让我知道是否有任何您需要协助的遗漏细节。
顺便说一句 - 任何优化技巧都很高兴在板上采用。
我不明白这一点,从您例如你想intellisensed什么参数,你在哪里的价值从何而来? – Iain 2010-10-28 21:15:01
hi iain - 参数将来自通用表达式>操作。即我可以'指向'一个名为GetStuff(int id,字符串名称)的动作,并且智能感应应该启动这些参数名称。实际上,自写这篇文章以来,我设法让它工作,所以在某个时候更新示例。 –
2010-10-29 07:35:40