gpt4 book ai didi

c# - 接口(interface)或继承类的 ASP.NET MVC3 编辑器模板

转载 作者:行者123 更新时间:2023-11-30 13:04:05 27 4
gpt4 key购买 nike

需要以与使用类相同的方式使用采用接口(interface)的“EditorTemplate”。

我有两个问题:

  1. 如果我包含名称为“EditorTemplate”的“DataAnnotation”“DataType”,我只能识别“EditorTemplate”。这并没有打扰到我,但是能够按类型识别它会很好,就像它有一个带有我的类型(类)名称的“EditorTemplate”一样。 [DataType ("ICanBeListed")]

  2. 我的界面使用泛型来定义属性的列表和返回类型。为此,我不知道该怎么做模板。

我知道有两个查询但是做同样的问题。

文件:

理想的 View 模型:

[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; }

接口(interface):

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>

我尝试更改类的接口(interface):

查看模型:

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"}
};
}
}

类(接口(interface)之前):

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] '.

谢谢

最佳答案

您声明 EditorTemplate 只能采用 ICanBeListed<object, object> .基本上,您声明要使用相同的 ICanBeListed<,>两种不同类型的模板,这不是你想要做的。您需要为 FieldOne 创建一个 EditorTemplate和 FieldTwo它们是不同的,以便您可以正确地匹配模型类型。

关于c# - 接口(interface)或继承类的 ASP.NET MVC3 编辑器模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10536688/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com