我有一个包含10个属性的ORDERMetadata,但我只想将一个只有5个属性的模型传递给我的view1,但其余5个属性传递给View2。有没有办法在ORDERMetadata中创建更小的模型,这样我只能通过在ORDERMetadata类中设置一些内容来获取我想要的属性?
我可以为我的观点这样做吗?
@using MVC.models.OrderMetadata<View1Model?>
@using MVC.models.OrderMetadata<View2Model?>
我的OrderModel.cs
[MetadataType(typeof(ORDERMetadata))]
public partial class ORDER
{
// Note this class has nothing in it. It's just here to add the class-level attribute.
}
public class ORDERMetadata
{
// <--- Model 1 Begin, for View1
[Required]
public int 1 { get; set; }
[Display(Name = "")]
public bool 2 { get; set; }
[Display(Name = "")]
public bool 3 { get; set; }
[Display(Name = "")]
public bool 4 { get; set; }
[Display(Name = "")]
public bool 5 { get; set; }
// <--- Model 1 End
//<---- Model 2, for View2
[Display(Name = "")]
public System.DateTime 6 { get; set; }
[Display(Name = "")]
public string 7 { get; set; }
[Display(Name = "")]
public string 8 { get; set; }
[Display(Name = "")]
public string 9 { get; set; }
[Display(Name = "")]
public string 10 { get; set; }
//<---- Model 2 end
}
答案 0 :(得分:1)
这件事总有一些奇怪的事实......
我有一个包含10个属性的ORDERMetadata,但我只想将一个只有5个属性的模型传递给我的view1,但其余5个属性传递给View2。有没有办法在ORDERMetadata中创建更小的模型,这样我只能通过在ORDERMetadata类中设置东西来获取我想要的属性
什么?首先,通常你只会渲染一个视图,对吧?那么为什么要分割对象并一次使用2个视图?我需要更详细的解释来了解您的需求。
我可以为我的观点这样做吗? @using MVC.models.OrderMetadata&lt; View1Model&GT?;
@using MVC.models.OrderMetadata&lt; ?View2Model&GT;
没有。首先,我猜你正试图制作一个强大的视图。这是正确的做法,但你做错了。 @using
表示您正在为命名空间创建别名或导入在其他命名空间中定义的类型。与View的模型无关。
制作一个强大的视图你会是这样的:
MyNamespace.ViewModels.MyViewModel
请务必记住,每个视图只能使用Model / ViewModel,因此您无法在一个视图中使用两个ViewModel。
此外,具有数字名称的属性是极其反模式的,所以请不要这样做。如果它以动态的方式使用,你应该创建一个集合并迭代它。
关于MetadataType属性,它并不意味着像你一样使用它。看看:http://patrickdesjardins.com/blog/why-it-is-wrong-to-use-the-asp-net-mvc-metadatatype-attribute
现在,做这个结构怎么样:
C#:
public class OrdersVM
{
public FirstDisplayVM FirstDisplay { get; set; }
public SecondDisplayVM SecondDisplay { get; set; }
public class FirstDisplayVM
{
public int Prop1 { get; set; }
public List<bool> MyBooleanValues { get; set; }
}
public class SecondDisplayVM
{
public int Prop1 { get; set; }
public List<string> MyStringValues { get; set; }
}
}
查看:
@model YourNamespaceHere.ViewModels.OrderVM
这只是一个划痕。你并没有真正明确你的需求,也不知道这些属性究竟是什么,但这有点模式可以遵循。
也是一种通用的编程建议:你真的应该使用你能想象到的每个类,属性,命名空间,属性,一切的最具语义的名称!然后,一旦你在一段时间之后或者在另一个班级/视图中阅读了你的房产名称,你就会确切地知道它的原因,并且不需要猜测/躲避&#34;这房产到底是什么/类/等...&#34;
如果您是ASP.Net MVC的新手,您应该在做任何事情之前尽可能多地了解ViewModels。当编程成为一个梦想时,在不知道正确的模式以及如何正确地完成它的情况下创建的结构将成为维护的噩梦。
ViewModel简介:
http://www.asp.net/mvc/overview/older-versions/mvc-music-store/mvc-music-store-part-3 http://sampathloku.blogspot.com.br/2012/10/how-to-use-viewmodel-with-aspnet-mvc.html http://nerddinnerbook.s3.amazonaws.com/Part6.htm
数据注释(常规&gt;显示/数据类型/范围/等...):
https://msdn.microsoft.com/en-us/library/dd901590%28v=vs.95%29.aspx
数据发表(验证):
https://msdn.microsoft.com/en-us/library/ee256141%28VS.100%29.aspx http://www.asp.net/mvc/overview/older-versions/mvc-music-store/mvc-music-store-part-6