C# Can';无法在我的视图中访问viewmodel中的元数据

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;

我想在视图中使用元数据,但我的模型(ToDoTable)打包在viewmodel(ModelsView列表)中,我不知道如何访问该模型。@foreach(ViewData.ModelMetadata.Properties中的var属性)不起作用:(

型号:

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)到同一个视图?否。再次,将视图逻辑放在视图模型上。