需要使用「EditorTemplate」採用的接口,在將使用一個類的方式相同。ASP.NET MVC3編輯模板用於接口或繼承類
我有兩個問題:
我只承認「EditorTemplate」如果我包括「DataAnnotation」,「數據類型」與名「EditorTemplate」。這並沒有打擾我很多,但能夠通過類型識別它會很好,就像它具有帶我的類型(類)名稱的「EditorTemplate」一樣。
[DataType ("ICanBeListed")]
我的接口使用泛型來定義列表,並返回的屬性類型。出於這個原因,我不知道如何做模板。
我知道有兩個查詢,但也有同樣的問題。
歸檔:
較佳視圖模型:
[DisplayName("Field one")]
public FieldOne MyFieldOne { get; set; }
[DisplayName("Field two")]
public FieldTwo MyFieldTwo { get; set; }
解點1:
[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();
}
類:
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尚未 –