MVC从单一视图创建多个对象
本文关键字:对象 创建 视图 单一 MVC | 更新日期: 2023-09-27 17:53:48
只是为了弄清楚,我的问题是如何使用单个视图创建多个对象。我的ViewModel工作得很好,我可以显示多个对象没有问题
在。net编码之间已经有一段时间了(上次我在2.0中编码)。我已经创建了一个MVC 4项目,并成功地创建了一个ViewModel(显示来自多个对象的单个视图上的数据)。
然而,我作弊了。我直接填充了数据库。我现在面临的问题是,从一个视图创建多个对象的最佳实践是什么?
在我的例子中,我有一个User,它有一个userId。userId是UserDetails中的外键。只是想回到它的摇摆,想知道你们在做什么?
在MVC中有6种传递多个对象的方法
- ViewModel
- 局部视图
- ViewBag
- 视讯系统
- TempData
- 元组
让我给出视图模型的优缺点
视图模型:优势
- ViewModel允许我们在视图中渲染多个模型类型单一模型。
- 强大的智能感知支持和编译时错误检查页面。
- ViewModel在安全性方面也很好,因为视图只有什么他们确实需要。核心领域模型不暴露给用户。
- 如果核心域模型有任何更改,则不需要更改更改View代码中的任何地方,只需要对其进行相应的修改ViewModel。
缺点/strong>
- ViewModels在模型和视图之间添加了另一层,所以它增加了稍微复杂一点。所以对于小型和演示应用程序,我们可以使用元组或其他方法来保持demo的简单性。
选项1:最好的方法是在Model或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的文件夹,并将所有的视图模型类放在其中。
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");