クラスを使用するのと同じ方法で、インターフェイスを使用する「EditorTemplate」を使用する必要があります。ASP.NET MVC3 Editorインターフェイスまたは継承クラスのテンプレート
は、私は2つの問題を抱えている:
私はEditorTemplate「「の名を持つ」「DataAnnotation」」データ型が含まれている場合、私は唯一の「EditorTemplate」を認識しています。これは私にはあまり気にしませんが、タイプ(クラス)の名前を持つ "EditorTemplate"を持っていた場合と同じように、タイプでそれを認識できるのは良いことです。
[DataType ("ICanBeListed")]
私のインターフェイスは、ジェネリックを使用してリストを定義し、プロパティの型を返します。このため、私はテンプレートをどのように行うのか分かりません。
私は2つのクエリがありますが、同じ問題があることを知っています。
アーカイブ:
望ましいビューモデル:
[DisplayName("Field one")]
[DataType("ICanBeListed")]
public FieldOne MyFieldOne { get; set; }
[DisplayName("Field two")]
[DataType("ICanBeListed")]
public FieldTwo MyFieldTwo { get; set; }
インタフェース:
public interface ICanBeListed<T, U>
{
U Id { get; set; }
string Description { get; set; }
IList<T> ToList();
}
クラス:ポイント1
[DisplayName("Field one")]
public FieldOne MyFieldOne { get; set; }
[DisplayName("Field two")]
public FieldTwo MyFieldTwo { get; set; }
ソリューション
public class FieldOne : ICanBeListed<FieldOne, string>
{
public string Id { get; set; }
public string Descripcion { get; set; }
public IList<FieldOne> List()
{
return new List<FieldOne>
{
new FieldOne{Id = "1", Descripcion = "Description 1"},
new FieldOne{Id = "2", Descripcion = "Description 2"}
};
}
}
public class FieldTwo : ICanBeListed<FieldTwo, int>
{
public int Id { get; set; }
public string Descripcion { get; set; }
public IList<FieldTwo> List()
{
return new List<FieldTwo>
{
new FieldTwo{Id = 1, Descripcion = "Descripcion 1"},
new FieldTwo{Id = 2, Descripcion = "Descripcion 2"}
};
}
}
テンプレートエディタ:
@model Mvc3ConditionalValidation.Models.ICanBeListed<object, object>
@Html.DropDownListFor(model => model.Id, new SelectList(Model.ToList(), "Id", "Description"))
ビュー:
<div class="editor-field">
@Html.EditorFor(model => model.MyFieldOne)
@Html.ValidationMessageFor(model => model.MyFieldOne)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.MyFieldTwo)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.MyFieldTwo)
@Html.ValidationMessageFor(model => model.MyFieldTwo)
</div>
私はクラスのためのインタフェースを変更しよう:
ビューモデル:
public class FieldTwo : CanBeListed<FieldTwo, int>
{
public override int Id { get; set; }
public override string Description { get; set; }
public override IList<FieldTwo> ForList()
{
return new List<FieldTwo>
{
new FieldTwo{Id = 1, Description = "Descripcion 1"},
new FieldTwo{Id = 2, Description = "Descripcion 2"}
};
}
}
クラス(インターフェース前):
public abstract class CanBeListed<T, U>
{
public virtual U Id { get; set; }
public virtual string Description { get; set; }
public abstract IList<T> ForList();
}
しかし、問題は同じです:辞書に渡さ
モデルアイテムはタイプ「Mvc3ConditionalValidation.Models.FieldOne」であるが、この辞書はモデルが必要型 'Mvc3ConditionalValidation.Models.CanBeListed`2 [System.Object、System.Object]'の項目です。
おかげ
これに対する解決策または回避策はありますか? – Odys
@odyodyodys not yet –