1

この非常に便利なメソッドのシグネチャは、タイプを示すことができると述べています。

public static MvcHtmlString EditorFor<TModel, TValue>(
    this HtmlHelper<TModel> html,
    Expression<Func<TModel, TValue>> expression
)

...ドキュメントには、TModelが「モデルのタイプ」であると非常に理解できるように記載されています。この説明が私に何の意味も伝えないのは、私の特別な傾向に違いありません。説明をグーグルで検索しましたが、zilchが見つかりました。

私は@model Website.Models.Product、別のタイプのエディターを作成したいと考えています。私はできると思った:

@Html.EditorFor(@ViewBag.AClassOfTheOtherType)

または多分(私は明らかに推測しています):

@Html.EditorFor(TheOtherType)

しかし、それは受け入れられない構文なので、私は考えました:

@Html.EditorFor(x => x...)

しかし、ラムダ式はにバインドされているよう@modelです...だから私は「ああ!」と思いました:

@Html.EditoFor<TheOtherType>(...)

しかし、VSは、<がHTMLタグを開始し、EditorFor呼び出しの終了を示していると見なします(失敗します)。

aaaaahhhhh!

これを行うにはどうすればよいですか(実際に質問する必要がある場合)?

4

3 に答える 3

2

これをテストしていませんが、テストできませんでした。

@Html.EditorFor(x => ViewBag.AClassOfTheOtherType)

Lambdaに渡された変数を必ずしも使用する必要はありません。

于 2011-05-16T05:52:34.690 に答える
0

モデル-モデル-MVCのM

TModelはsdserweJJGである可能性もあります。これは、慣例から一貫してTModelと呼ばれるだけです。

EditorForのヘルパーメソッド内に次のようなものが表示されます。

 TValue val = expression.Compile()(htmlHelper.ViewData.Model);

これは、拡張メソッドが渡されたラムダ(たとえば、x=>x.Model.Propertyパーツ)をコンパイルし、実際のモデルデータを取得して、実際の表示コントロールを構築するために使用する場所です。

return View(viewModel);コントローラアクションから呼び出すと、モデルがビューに渡されます。

メソッドはビューモデルで機能するように設計されているため、実行しようとしていることは意味がありません。

ただし@Html.Editor、これは実際の値を試している方法で取得するため、使用できます。

@Html.Editor(ViewBag.AClassOfTheOtherType)

MVCのソースコードは、ダウンロードして表示するために無料で入手できます。時間をかけて実行する価値は十分にあります:)

于 2011-05-15T20:24:38.947 に答える
0

答えは(ドラムロールしてください)...はい、ラムダ式を型宣言子にバインドできます。唯一の問題は、Visual Studioエディターです。これは、C#部分を終了し、開始<でHTML部分を入力しているため、適切なコードを許可しないと考えています。解決:

@{ Html.EditoFor<TheOtherType>(...) }
于 2011-05-22T01:55:35.480 に答える