我正在尝试在asp.net mvc框架中编写一个html帮助扩展。
public static MvcHtmlString PlatformNumericTextBoxFor<TModel>(this HtmlHelper instance, TModel model, Expression<Func<TModel,double>> selector)
where TModel : TableServiceEntity
{
var viewModel = new PlatformNumericTextBox();
var func = selector.Compile();
MemberExpression memExpession = (MemberExpression)selector.Body;
string name = memExpession.Member.Name;
var message = instance.ValidationMessageFor<TModel, double>(selector);
viewModel.name = name;
viewModel.value = func(model);
viewModel.validationMessage = String.Empty;
var result = instance.Partial(typeof(PlatformNumericTextBox).Name, viewModel);
return result;
}
该行
var message = instance.ValidationMessageFor<TModel, double>(selector);
有语法错误。但我不明白。错误是:Fehler 2“System.Web.Mvc.HtmlHelper”enthältkeine定义für“ValidationMessageFor”,unddieÜberladungder optimalen Erweiterungsmethode“System.Web.Mvc.Html.ValidationExtensions.ValidationMessageFor(System.Web.Mvc.HtmlHelper, System.Linq.Expressions.Expression&gt;)“weisteinigeungültigeArgumenteauf。 C:\ Projects \ WorkstreamPlatform \ WorkstreamPlatform_WebRole \ Extensions \ PlatformHtmlHelpersExtensions.cs 97 27 WorkstreamPlatform_WebRole
因此根据消息,参数无效。但该方法实际上是这样声明的:
public static MvcHtmlString ValidationMessageFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression);
所以实际上它应该有用。
答案 0 :(得分:4)
将您的方法声明更改为:
public static MvcHtmlString PlatformNumericTextBoxFor<TModel>(
this HtmlHelper<TModel> instance,
TModel model,
Expression<Func<TModel,double>> selector) where TModel : TableServiceEntity
{
}
注意通用this HtmlHelper<TModel>
。此外,第二个参数不是必需的,因为您可以从强类型帮助器中检索模型:
var model = instance.ViewData.Model;