C# Can';无法在我的视图中访问viewmodel中的元数据
我想在视图中使用元数据,但我的模型(ToDoTable)打包在viewmodel(ModelsView列表)中,我不知道如何访问该模型。@foreach(ViewData.ModelMetadata.Properties中的var属性)不起作用:( 型号:C# Can';无法在我的视图中访问viewmodel中的元数据,c#,asp.net-mvc,C#,Asp.net Mvc,我想在视图中使用元数据,但我的模型(ToDoTable)打包在viewmodel(ModelsView列表)中,我不知道如何访问该模型。@foreach(ViewData.ModelMetadata.Properties中的var属性)不起作用:( 型号: public partial class ToDoTable { [HiddenInput(DisplayValue = false)] public int ID { get;
public partial class ToDoTable
{
[HiddenInput(DisplayValue = false)]
public int ID { get; set; }
[Required(ErrorMessage = "Please write name of event.")]
public string EventName { get; set; }
[MaxLength(50, ErrorMessage = "Description must be shorter than 50 characters ")]
[Required(ErrorMessage = "Proszę podać opis.")]
public string Description { get; set; }
[Display(Name = "Tu wpisz format daty")]
[DataType(DataType.Date, ErrorMessage = "Date mast be in format described")]
public string Data { get; set; }
}
控制器:
using System.Web.Mvc;
using ToDoLibrary.Abstract;
using ToDoUI.ModelsViews;
namespace ToDoUI.Controllers
{
public class HomeController : Controller
{
IToDoRepository repository;
public HomeController(IToDoRepository rep)
{
repository = rep;
}
public ViewResult List()
{
ToDoLibrary.ToDoTable model = new ToDoLibrary.ToDoTable();
ModelsViewList modelView = new ModelsViewList()
{
FromRepository = repository.FromRepository,
ModelDB = model
};
return View(modelView);
}
}`
}
视图:
@model-ToDoUI.ModelsViews.ModelsViewList
@{
ViewBag.Title=“列表”;
}
皮耶尔瓦萨·科卢姆纳
@使用(Html.BeginForm(“Edit”、“Admin”、FormMethod.Post、new{enctype=“multipart/formdata”}))
{
@foreach(ViewData.ModelMetadata.Properties中的var属性)
{
开关(property.PropertyName)
{
案例“ID”:
打破
违约:
@(property.DisplayName??property.PropertyName)
@if(property.PropertyName==“Description”)
{
@TextArea(property.PropertyName,null,new{@class=“form control”,rows=5})
}
其他的
{
@TextBox(property.PropertyName,null,new{@class=“form control”})
}
@Html.ValidationMessage(property.PropertyName)
打破
}
}
@ActionLink(“Anuluj i wróćdo listy”,“Index”,空,新
{
@class=“btn btn默认值”
})
}
您的属性名称应该更像ModelDB.ID
,因为您的元数据与ToDoUI.ModelsViews.ModelsViewList
相关,后者包含一个属性ModelDB
,它是您正在引用的ToDoTable
对象
否则:
var metaData = ModelMetadataProviders.
Current.GetMetadataForType(null, Model.ModelDB.GetType());
这将为您提供ToToTable的元数据,然后您可以查看您的属性。无论如何,我不确定它是否会帮助您做一些体面的事情…因为它看起来不会:)您的属性名称应该更像
ModelDB.ID
,因为您的元数据与ToDoUI.ModelsViews.ModelsViewList
相关,后者包含一个属性ModelDB
,它是您正在引用的ToDoTable
对象
否则:
var metaData = ModelMetadataProviders.
Current.GetMetadataForType(null, Model.ModelDB.GetType());
这将为您提供ToToTable的元数据,然后您可以查看您的属性。不管怎样,我不确定这是否能帮你做点像样的事。。。因为看起来不会:)你不能。但是,问题不在于如何从实体类中获取元数据,而是实体类首先不应该具有此元数据。这些注释属于视图模型。实体类应该只包含与数据库有关的内容,而不是您的视图。您不能。但是,问题不在于如何从实体类中获取元数据,而是实体类首先不应该具有此元数据。这些注释属于视图模型。实体类应该只包含与数据库有关的内容,而不是您的视图。是的,我知道,但如何在不将@model更改为doui.ModelsViews.ModelsViewListI的情况下执行此操作我不确定子对象的元数据是否已加载到模型中。因此,最好的方法是在新视图中传递ToToTable对象,在新视图中您肯定可以访问元数据。但在执行此操作之前,您可以尝试案例“ModelDB.ID:-)我正在处理一个项目,不幸的是,所有内容都必须在一个视图中。不允许创建多个视图:(。这是用于招聘流程项目。即将发送的消息"无法从“ToDoLibrary.ToToToTable”转换为“System.Func”是的,我知道,但如何在不更改@model ToDoUI.ModelsView.ModelsView的情况下进行转换我不确定子对象的元数据是否已加载到模型中。因此,最好的方法是在新视图中传递ToToTable对象,在该视图中您肯定可以访问metadata.但在执行此操作之前,您可以尝试案例“ModelDB.ID:-)我正在处理一个项目,不幸的是,所有内容都必须在一个视图中。不允许创建多个视图:(.这是用于招聘流程项目。即将出现的消息“无法从'ToDoLibrary.ToDoTable'转换为'System.Func'确定,但是否有某种方法可以为模型(ToDoTable)提供元数据和viewmodel(@model ToDoUI.ModelsView.ModelsView列表)到同一视图?否。再次,将视图逻辑放在视图模型上。确定,但是否有某种方法可以为模型(ToDoTable)提供元数据和viewmodel?”(@model ToDoUI.ModelsViews.ModelsViewList)到同一个视图?否。再次,将视图逻辑放在视图模型上。