MVC从单个视图创建多个对象

时间:2014-03-27 09:12:28

标签: c# asp.net-mvc asp.net-mvc-4 asp.net-mvc-viewmodel

为了说清楚,我的问题是如何使用单个视图创建多个对象。我的ViewModel工作正常,我可以显示多个对象没问题

.NET编码之间有一段时间(上次我在2.0编码)。我创建了一个MVC 4项目,并成功创建了一个ViewModel(在多个对象的单个视图上显示数据)。

然而,我作弊。我直接填充了数据库。我现在反过来看一个问题,从单个视图创建多个对象的最佳做法是什么?

在我的示例中,我有一个 User ,其中有 userId userId UserDetails 中的外键。

只是想回到它的摇摆,想知道你们做了什么?

2 个答案:

答案 0 :(得分:4)

有多种方法可以在MVC中传递多个对象

  1. ViewModel
  2. 部分视图
  3. ViewBag
  4. ViewData
  5. TempData
  6. 元组
  7. 每个人都有自己的优点和缺点。你必须根据你的问题来决定。 有关更多信息,请参阅代码项目文章:How to Choose the Best Way to Pass Multiple Models in ASP.NET MVC

    让我看看View Model

    的优点和缺点

    ViewModel: 优点

    • ViewModel允许我们在视图中渲染多个模型类型 单身模特。
    • 对View的大智能感知支持和编译时错误检查 页。
    • ViewModel也有利于安全,因为Views只有什么 他们确实需要。核心域模型不会向用户公开。
    • 如果核心域模型有任何更改,则不需要 在View代码中的任何地方更改,只需要修改相应的 视图模型。

    <强>缺点

    • ViewModels在模型和视图之间添加另一个图层,使其增加 复杂性有点。因此,对于小型和演示应用程序,我们 可以使用元组或其他方法来保持演示的简单。

答案 1 :(得分:2)

选项1: 最好的方法是使用模型或ViewModel的强类型视图。

例如,您有两个类UserEducation,您希望在视图中显示用户的所有教育详细信息,您可以创建自定义视图模型并将其传递给视图,在那里您视图是强类型视图模型:

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