私は自分のシステム内のさまざまなモジュールの構成フォーム用のベースビューモデルを実装しました。動的に作成されたビュー:クライアント側の検証のために、プロパティのメタデータをネストされたビューに移入しますか?
その基地ロジックでは、私は(USER-)派生のviewmodelの反映性質を反復し、動的ConfigItemのリストを作成していますが、次のように私の物が見え簡体
オブジェクト:
public class ConfigItem
{
public string Key { get; set; }
public object Value { get; set; }
public Type PropertyType { get; set; }
public ConfigType ConfigType { get; set; }
public string PostId { get; set; }
};
"value"プロパティは、単純型または複合型(文字列、ブール画像など)のオブジェクトにすることができます。
ネストされたビューでは、すべてのConfigItemをループでレンダリングしています(それぞれをツールチップなどの追加情報で飾るためです)。 投稿フォームのバインディングについては、入力フィールドのname属性を設定しているので、値は元のviewmodelプロパティに戻されます。 DataAnnotation属性の検証は、サーバー側で機能します。今問題に
:我々はすべてのASPを知っているよう
は控えめな検証属性のjQueryをレンダリングする巧妙な機能が付属しています。残念ながら、私は元のプロパティの代わりにConfigItemsをレンダリングするときに私のメタデータをすべて失っているので、ASPは私の属性について知らない。 "Required"または "StringLength"。どのようにしてプロパティのメタデータを「持ち歩く」方法を知っている人はいますか?
最高のものは、私のConfigItemの値がExpression型のような式ツリーである可能性があるため、元のプロパティに「ポインタ」を添えて渡すことができます。しかし、私はそれを技術的に解決する方法を理解できませんでした。誰かがこれに少しの光を当てることができれば(あるいは、他のヒントを持っているかもしれない)、私はそれを高く評価します。ありがとう!
アップデート:私は、私はモデル状態を評価少しカスタムのHTMLヘルパー、と私ConfigItemsをレンダリングしてい :
@model ConfigItem
<div class="value">
@switch (Model.DataType)
{
case ConfigDataType.String:
{
var value = Model.Value == null ? "" : Model.Value;
@Html.EditorFor(m => value, "string", Model.PostId)
break;
}
case ConfigDataType.Bool:
{
@Html.EditorFor(m => Model.Value, "", Model.PostId)
break;
}
case ConfigDataType.Image:
{
@Html.ConfigImage(Model.Key, m => Model.Value, Url.Action(ApplicationController.ActionUploadImage), Model.PostId)
break;
}
}
@if (!string.IsNullOrEmpty(Model.ValidationMessage))
{
<span class="@errorClass">
@Html.Raw(Model.ValidationMessage)
</span>
}
</div>
どのようにConfigItemsをレンダリングしていますか? JQuery AJAX経由で、またはあなたのコードによってのみ? –
私は質問をさらに明確にするために更新しました。 –
あなたの部分的なビューでスクリプトを失った、そうですか? –