Có cách nào để làm cho các thông số của phương pháp mở rộng này 'không thể nhận ra' từ chế độ xem của tôi không?Phương pháp mở rộng LINQ giúp tìm kiếm II
Hiện tại, tôi có thể nhận được chú giải công cụ về thông số (trong phương thức hành động của bộ điều khiển) nhưng rất muốn tự tin IntelliSense nhập tên tham số cho 'an toàn'. Dù sao, không có thêm ado, phương pháp này, tiếp theo là sử dụng:
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;
}
sử dụng (nơi FundShareholderController
là bộ điều khiển của tôi và x.JsFile()
là một phương pháp hành động về việc này.):
<%=Html.Script<FundShareholderController>(x => x.JsFile("CreateInvestorBookingJsFile", 0))%>
Tôi hy vọng điều này có ý nghĩa . Hãy cho tôi biết nếu có bất kỳ chi tiết nào còn thiếu mà bạn cần hỗ trợ.
BTW - mọi mẹo tối ưu hóa cũng sẵn sàng được đưa lên máy bay.
Tôi không hiểu, ví dụ về thông số nào bạn muốn intellisensed và giá trị đến từ đâu? – Iain
hi iain - các tham số sẽ đến từ hành động Expression>. tức là tôi có thể 'trỏ' vào một hành động được gọi là GetStuff (int id, tên chuỗi) và intellisense sẽ khởi động các tên tham số đó. thực sự, kể từ khi viết này, tôi đã quản lý để làm cho nó hoạt động, vì vậy sẽ cập nhật ví dụ tại một số điểm. –