2012-05-10 8 views
0

私はこのようなのHtmlHelperを持っています(わかりやすくするために簡略化)HtmlHelper内からHtml.HiddenForを呼び出すことはできません。どうして?

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 
} 

何が起こることはexpressionIdstringを返したときにコードが正常に動作していることです。しかし、それは、Html.HiddenForトリガーこのエラーintを返す場合:

Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions.

を私は問題がある正確に把握していないが、私はそれがこれとは何かを持っている疑いがある: 私はデバッグモードでexpressionIdを検査するとき、私は式がm => m.Idの代わりにm => Convert(m.Id)であることがわかります。

MyHelperは、HiddenForとまったく同じ引数型を受け取りました。だから、なぜ私はその議論を唱えることができないのですか?

どうすればよいですか?

PS

私はMyHelperに任意のNULL可能な式を渡していないよ(私はこれが答えだったにいくつかの他の質問を見てきました)

答えて

1

問題は、非のキャスト式であります-nullable型です。

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 
} 
+0

をしかし、これは私がやったまさにです:

objectするのではなく、強く型付けされたヘルパーを使用してみてください! –

+0

ああ、あなたの議論は、私が私の答えで言ったことではない、この 'Expression >'のように見えます。私の答えでは、ヘルパーに第二の一般的な議論を追加しました。もっと見る。 –

+0

さて、確認します –

関連する問題