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

本文关键字:对象 创建 视图 单一 MVC | 更新日期: 2023-09-27 17:53:48

只是为了弄清楚,我的问题是如何使用单个视图创建多个对象。我的ViewModel工作得很好,我可以显示多个对象没有问题

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

然而,我作弊了。我直接填充了数据库。我现在面临的问题是,从一个视图创建多个对象的最佳实践是什么?

在我的例子中,我有一个User,它有一个userIduserIdUserDetails中的外键。

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

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

在MVC中有6种传递多个对象的方法

  1. ViewModel
  2. 局部视图
  3. ViewBag
  4. 视讯系统
  5. TempData
  6. 元组
每个人都有自己的优点和缺点,你必须根据你手头的问题来决定。要了解更多信息,您可以参考代码项目文章:如何选择在ASP中传递多个模型的最佳方式。净MVC

让我给出视图模型的优缺点

视图模型:优势

  • ViewModel允许我们在视图中渲染多个模型类型单一模型。
  • 强大的智能感知支持和编译时错误检查页面。
  • ViewModel在安全性方面也很好,因为视图只有什么他们确实需要。核心领域模型不暴露给用户。
  • 如果核心域模型有任何更改,则不需要更改更改View代码中的任何地方,只需要对其进行相应的修改ViewModel。
<

缺点/strong>

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

选项1:最好的方法是在Model或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的文件夹,并将所有的视图模型类放在其中。

Option2: 选项2是用户ViewBag并将多个对象从控件传递到视图,ViewBag是可访问的,当你在控制器中设置一些值时,你可以在视图中访问该动作,之后它会自动清除,如果你再次访问它,它将为空。

你可以这样使用ViewBag:

ViewBag.Message = "Using ViewBag";

和读取值如下:

string Message = ViewBag.Message as string;

选项3:

选项3是将数据存储在TempData中,它一旦只读,意味着你在其中设置了值,当你读取它时,它会自动删除,TempData内部使用会话变量。你可以这样使用TempData:

TempData["Key"] = "value";

现在在视图中读取:

string val = TempData["Key"] as string;

阅读后,它将被自动删除,但如果您需要它,可以保留它,像这样:

TempData.Keep("Key");