वहाँ मेरे विचार से 'intellisensible' इस विस्तार विधि के मापदंडों बनाने के लिए एक रास्ता है की मांग?LINQ विस्तार विधि सहायता द्वितीय
पल में, मैं क्या मानकों (नियंत्रक कार्रवाई विधि में) कर रहे हैं की एक टूलटिप कुहनी से हलका धक्का प्राप्त कर सकते हैं लेकिन 'सुरक्षा' के लिए आत्मविश्वास से 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))%>
मुझे आशा है कि यह समझ में आता है । मुझे बताएं कि क्या कोई लापता विवरण है जिसे आपको सहायता करने की आवश्यकता है।
Btw - किसी भी अनुकूलन युक्तियों की ख़ुशी पर बोर्ड भी लिया जाता है।
मैं समझ नहीं है, अपने उदाहरण क्या मानकों आप intellisensed चाहते से, और जहां मूल्यों से आते हैं? – Iain
हाय आईन - पैरामीटर सामान्य अभिव्यक्ति> कार्रवाई से आएंगे। यानी मैं GetStuff (int id, string name) नामक एक क्रिया को 'पॉइंट' कर सकता हूं और उन पैरामीटर नामों पर इंटेलिजेंस को लात मारना चाहिए। असल में, इसे लिखने के बाद, मैंने इसे काम करने में कामयाब रहा है, इसलिए कुछ बिंदु पर उदाहरण अपडेट किया जाएगा। –