jim*_*lan 5 .net c# asp.net-mvc
有没有办法让我的视图中的这个扩展方法的参数'intellisensible'?
目前,我可以获得一个工具提示,指出参数(在控制器动作方法中)是什么,但是我很乐意自信地将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;
}
Run Code Online (Sandbox Code Playgroud)
用法(FundShareholderController我的控制器在哪里,x.JsFile()是一个动作方法.):
<%=Html.Script<FundShareholderController>(x => x.JsFile("CreateInvestorBookingJsFile", 0))%>
Run Code Online (Sandbox Code Playgroud)
我希望这是有道理的.如果您需要提供任何缺失的详细信息,请与我们联系.
BTW - 任何优化技巧也很乐意在船上进行.
尝试在方法上添加XML注释,如下所示.
/// <summary>
/// The summary of my Script Extension method.
/// </summary>
/// <typeparam name="T">T is the type of Controller</typeparam>
/// <param name="html">The HTML helper.</param>
/// <param name="action">The action Method of the Controller.</param>
/// <returns></returns>
Run Code Online (Sandbox Code Playgroud)
将上述注释放在扩展方法后,我可以在IntelliSense中看到它们.见下图.

| 归档时间: |
|
| 查看次数: |
221 次 |
| 最近记录: |