1

最終的な目標は、実行時にのみ認識され、ViewBag から値を取得しないモデル プロパティのエディター テンプレートをレンダリングすることです。

Html.Editorプロパティ名が一致する場合、ViewBag 値が使用されます。私はこれを望んでおらず、この「機能」が嫌いです。

これがどういうわけか可能であることを願っています:

var propName = "MyProperty";
var expression = GiveMeTheExpression();
@Html.EditorFor(expression,"MyEditorTemplate")

そうでない場合は、モデルの値の代わりにビューバッグの値を使用せずにエディター テンプレートをレンダリングする何らかの方法があります。ビューバッグの値を何らかの方法で無視できる場合は、これを行っても問題ありません。

@Html.Editor(propName, other, arguments)
4

4 に答える 4

1

おそらく、カスタム ViewDataDictionary で Html.Partial を使用する必要があります。

object knownAtRuntime = ViewBag.ObjectName; // Adapt to your solution
string templateName = String.Concat("EditorTemplates/", knownAtRuntime.GetType().Name);            

@Html.Partial(templateName, knownAtRuntime, new ViewDataDictionary(knownAtRuntime));

注: この例は、核となる概念を説明するために単純化しましたが、もちろん、必要に応じてUIHintAttributeなどを読み取るように拡張することもできます。

注 2: Html.ViewData から新しい ViewDataDictionary に値をコピーして、モデルの状態などを維持することもできます。

于 2012-09-14T11:27:25.807 に答える
0

これを試してみませんか?

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

仮定SomePropertyNameは、ビューに強く入力されたモデルのプロパティの名前です。

于 2012-09-14T04:29:38.533 に答える
0

Shyjuは強く型付けされたオブジェクトを扱っています。正しく理解できれば、次のようなものが必要です: asp.net mvc 3 と動的ビューの生成

于 2012-09-14T06:40:58.423 に答える
0

私の解決策は、プロパティ名を文字列として @Html.Editor() メソッドを使用し、モデル オブジェクトで見つかる可能性が非常に低い ViewBag キーを使用することでした。

理想的ではありませんが、うまく機能するはずです。

于 2012-09-15T12:27:01.010 に答える