4

メインの Web MVC プロジェクトから分離したい dll に非常に単純なビューモデルがあります。

UI が正しいプレゼンテーション (DisplayName、UIHint、DataType、ReadOnly など) を表示するのに役立つメタデータ属性でモデルを装飾しています。後でこの情報を別のプレゼンテーション レイヤー (Silverlight など) で再利用したいと考えています。

ほとんどの属性は名前空間 System.ComponentModel.DataAnnotations から取得されますが、 HiddenInputがその例外であることを発見して驚いたので、ビューモデル dll に System.Web.Mvc への参照を追加する必要があります。

それを他の属性に含めなかった特定の理由はありますか?

HiddenInput.ascx を editortemplates フォルダーに配置してデフォルトの動作をオーバーライドしようとしましたが、ビューで html.EditorfForModel() を呼び出すと、フィールドのラベルが取得されます。

4

1 に答える 1

3

に含まれていない理由System.ComponentModel.DataAnnotationsは、このアセンブリが BCL の一部であり、ASP.NET MVC の前に存在していたためだと思います。Brad Wilson は、MVC のモデル メタデータを取り上げた素敵なブログ記事を書いています。

[UIHint]これは、次のように属性を使用できると言われています。

public class MyViewModel
{
    [UIHint("Hidden")]
    public string Value { get; set; }
}

そしてで~/Views/Home/EditorTemplates/Hidden.ascx

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<string>" %>
<%: Html.HiddenFor(x => x) %>

ビューで使用できるよう<%= Html.EditorForModel() %>になり、カスタム テンプレートが選択されます。

もちろん、[HiddenInput]コードの記述が少なくなるため、使用が推奨されますが、プロジェクトで参照したくない場合はSystem.Web.Mvc、まだUIHint回避策があります..

于 2010-10-13T16:44:38.440 に答える