Sto cercando di scrivere un'estensione helper html all'interno del framework asp.net mvc.
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;
}
La linea
var message = instance.ValidationMessageFor<TModel, double>(selector);
ha un errore di sintassi. Ma non lo capisco. L'errore è: Fehler 2 "System.Web.Mvc.HtmlHelper" enthält keine Definizione für "ValidationMessageFor", und die Überladung der optimalen Erweiterungsmethode "System.Web.Mvc.Html.ValidationExtensions.ValidationMessageFor (System.Web.Mvc. HtmlHelper, System.Linq.Expressions.Expression>) "weist einige ungültige Argumente auf. C: \ Projects \ WorkstreamPlatform \ WorkstreamPlatform_WebRole \ Extensions \ PlatformHtmlHelpersExtensions.cs 97 27 WorkstreamPlatform_WebRole
Quindi, secondo il messaggio, il parametro non è valido. Ma il metodo è in realtà dichiarato come questo:
public static MvcHtmlString ValidationMessageFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression);
Quindi in realtà dovrebbe funzionare.
Cambia la dichiarazione del tuo metodo in:
public static MvcHtmlString PlatformNumericTextBoxFor<TModel>(
this HtmlHelper<TModel> instance,
TModel model,
Expression<Func<TModel,double>> selector) where TModel : TableServiceEntity
{
}
Si noti il generico this HtmlHelper<TModel>
. Anche il secondo argomento non è necessario in quanto è possibile recuperare il modello dall'help fortemente tipizzato:
var model = instance.ViewData.Model;