为了说清楚,我的问题是如何使用单个视图创建多个对象。我的ViewModel工作正常,我可以显示多个对象没问题。
.NET编码之间有一段时间(上次我在2.0编码)。我创建了一个MVC 4项目,并成功创建了一个ViewModel(在多个对象的单个视图上显示数据)。
然而,我作弊。我直接填充了数据库。我现在反过来看一个问题,从单个视图创建多个对象的最佳做法是什么?
在我的示例中,我有一个 User ,其中有 userId 。 userId 是 UserDetails 中的外键。
只是想回到它的摇摆,想知道你们做了什么?
答案 0 :(得分:4)
有多种方法可以在MVC中传递多个对象
每个人都有自己的优点和缺点。你必须根据你的问题来决定。 有关更多信息,请参阅代码项目文章:How to Choose the Best Way to Pass Multiple Models in ASP.NET MVC
让我看看View Model
的优点和缺点ViewModel: 优点强>
<强>缺点强>
答案 1 :(得分:2)
选项1: 最好的方法是使用模型或ViewModel的强类型视图。
例如,您有两个类User
和Education
,您希望在视图中显示用户的所有教育详细信息,您可以创建自定义视图模型并将其传递给视图,在那里您视图是强类型视图模型:
public class User
{
public int UserId {get;set;}
public string UserName {get;set}
-------
------
}
public class Education
{
public int UserId {get;set;}
public int DegreeId {get;set;}
public long Marks {get;set;}
---------------
--------------
}
现在创建一个这样的视图模型:
public class EducationViewModel
{
public User user {get;set;}
public List<Education> educationList {get;set;}
}
现在将ViewModel传递给View并在View中执行此操作:
@model AppNameSpace.ViewModels.EducationViewModel
提示:创建一个名为ViewModels的文件夹,并将所有viewmodel类放入其中。
<强>选项2:强> 选项2是用户 ViewBag 并将多个对象从控件传递到您的视图,当您在控制器中设置了一些值时,可以访问 ViewBag ,您可以在视图中访问该动作之后会被自动清除,如果再次访问它则为null。
您可以像这样使用ViewBag:
ViewBag.Message = "Using ViewBag";
并在View中读取这样的值:
string Message = ViewBag.Message as string;
选项3:
选项3是将数据存储在 TempData 中,其一次只读,意味着您在其中设置值,当您读取它时,它会自动删除,TempData内部使用会话变量。您可以使用像这样的TempData:
TempData["Key"] = "value";
现在你在视野中阅读:
string val = TempData["Key"] as string;
阅读后,它会自动删除,但如果你需要它,你可以保留它:
TempData.Keep("Key");