Appelez asp.net mvc Html Helper dans l’assistant HTML personnalisé avec le paramètre expression

asp.net-mvc expression-trees html-helper lambda

Question

J'essaie d'écrire une extension d'assistance HTML dans le cadre 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 ligne

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;

    }

a une erreur de syntaxe. Mais je ne le comprends pas. L'erreur est la suivante: Fehler 2 "System.Web.Mvc.HtmlHelper" dans la liste des définitions pour "ValidationMessageFor", et le résultat optimal pour le système "System.Web.Mvc.Html.ValidationExtensions.ValidationMxtage.ValidationMessageFor (System.Web. HtmlHelper, System.Linq.Expressions.Expression>) "weist einige ungültige Argumente auf. C: \ Projects \ WorkstreamPlatform \ WorkstreamPlatform_WebRole \ Extensions \ PlatformHtmlHelpersExtensions.cs 97 27 WorkstreamPlatform_WebRole

Donc, selon le message, le paramètre n'est pas valide. Mais la méthode est réellement déclarée comme ceci:

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;

    }

Donc en fait ça devrait marcher.

Réponse acceptée

Changez votre déclaration de méthode en:

public static MvcHtmlString PlatformNumericTextBoxFor<TModel>(
    this HtmlHelper<TModel> instance, 
    TModel model, 
    Expression<Func<TModel,double>> selector) where TModel : TableServiceEntity
{

}

Notez le générique this HtmlHelper<TModel> . De plus, le deuxième argument n'est pas nécessaire car vous pouvez récupérer le modèle à partir de l'aide fortement typée

public static MvcHtmlString PlatformNumericTextBoxFor<TModel>(
    this HtmlHelper<TModel> instance, 
    TModel model, 
    Expression<Func<TModel,double>> selector) where TModel : TableServiceEntity
{

}



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi