0

私はこのようなHtmlHelperを持っています:(明確にするために簡略化されています)

public static MvcHtmlString MyHelper<TModel>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, object>> expressionId)
{
    // do something here

    tagBuilder.Append(htmlHelper.HiddenFor(expressionId));

    // do something here
}

何が起こるかというと、をexpressionId返すときにコードが正常に機能するということですstring。しかし、それが戻ったときにintHtml.HiddenForこのエラーをトリガーします。

テンプレートは、フィールドアクセス、プロパティアクセス、単一次元配列インデックス、または単一パラメーターのカスタムインデクサー式でのみ使用できます。

問題が何であるかは正確にはわかりませんが、これと関係があるのではないかと思いexpressionIdます。デバッグモードで検査すると、式がm => Convert(m.Id)期待どおりではなく、次のようになっていることがわかりm => m.Idます。

私を悩ませているのは、MyHelperとまったく同じ引数タイプを受け取っていることHiddenForです。では、なぜ私はその議論を再通過できないのですか?

私は何をすべきか?

PS

私はnull許容式をMyHelperに渡していません(これが答えである他のいくつかの質問を見ました)

4

1 に答える 1

1

問題は、null許容型ではない型のキャスト式にあります。

の代わりに強く型付けされたヘルパーを使用してみてくださいobject

public static MvcHtmlString MyHelper<TModel, TProperty>(
    this HtmlHelper<TModel> htmlHelper, 
    Expression<Func<TModel, TProperty>> expressionId
)
{
    // do something here

    tagBuilder.Append(htmlHelper.HiddenFor(expressionId));

    // do something here
}
于 2012-05-10T12:02:07.683 に答える