我希望在一个视图中有2个模型.该页面包含LoginViewModel和RegisterViewModel.
例如
public class LoginViewModel
{
public string Email { get; set; }
public string Password { get; set; }
}
public class RegisterViewModel
{
public string Name { get; set; }
public string Email { get; set; }
public string Password { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我是否需要创建另一个包含这两个ViewModel的ViewModel?
public BigViewModel
{
public LoginViewModel LoginViewModel{get; set;}
public RegisterViewModel RegisterViewModel {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
我需要将验证属性提交给视图,这就是我需要ViewModel的原因.
是不是有另一种方式,如(没有BigViewModel):
@model ViewModel.RegisterViewModel
@using (Html.BeginForm("Login", "Auth", FormMethod.Post))
{
@Html.TextBoxFor(model => model.Name)
@Html.TextBoxFor(model …Run Code Online (Sandbox Code Playgroud) 我有一个项目,其中ViewModels彼此嵌套,这样它们本质上是域层次结构的字符串类型复制.例如,如果我们的域具有以下关系:
组织有1到多个环境
环境有1到多台机器
然后会有一个OrganizationViewModel,其中包含一个或多个EnvironmentViewModel,而EnvironmentViewModel本身就有一个到多个MachineViewModel.然后,在整个应用程序中重用此样式的层次结构,其中包含此类型的大约五个ViewModel之一.(例如,EnvironmentViewModel用于多个页面,MachineViewModel也适用于其中许多页面,具体取决于正在查看的层次结构的级别...我为了讨论的目的简化了这个,但是层次结构比上面的3更大).
现在,尽管我想从上面下来并谴责这种做法,但我还是找不到有关此问题的更多信息.有人能指出我有关既定做法的更多细节吗?轶事分享?
(我自己的偏见是这些ViewModel不应该以这种方式嵌套在彼此之内,并且ViewModel实际上应该对应于Views,而不是域对象.我发现它对于一些可维护性问题非常混乱.但我想要知道别人的想法或经历过.)
我正在使用MVC(第一次)使用Entity框架,数据库优先
我想要做的是在单个视图中显示数据库中的数据.我首先创建了数据库,然后根据包含所有表的数据库创建了一个ADO.NET实体数据模型.然后我创建了一个使用我的实体数据模型作为模型强类型的索引视图.
在我的索引中,我有顶部
@model IEnumerable<Forum6.Models.Forum>
Run Code Online (Sandbox Code Playgroud)
这允许我从我的数据库中获取表"论坛"中的行.如果我尝试添加额外的模型,我得到运行时收到此错误消息:
Run Code Online (Sandbox Code Playgroud)Line 1: @model IEnumerable<Forum6.Models.Forum> Line 2: @model2 IEnumerable<Forum6.Models.Post>分析器错误消息:文件中只允许一个"模型"语句.
在找到答案之后我发现了这个:ASP MVC 3中的一个视图中的两个模型 答案是创建一个包含所有模型(表)的ViewModel(ParentModel).这是我创建的ViewModel:
public class ViewModel
{
public IEnumerable<Forum6.Models.Forum> Forum { get; set; }
public IEnumerable<Forum6.Models.Post> Post { get; set; }
public IEnumerable<Forum6.Models.Topics> Topics { get; set; }
public IEnumerable<Forum6.Models.Users> Users { get; set; }
public IEnumerable<Forum6.Models.PrivMsg> PrivMsg { get; set; }
public IEnumerable<Forum6.Models.Permission> Permission { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我编辑我的控制器看起来像这样:
public class HomeController : Controller
{
// ForumDBEntities old_db = new ForumDBEntities(); …Run Code Online (Sandbox Code Playgroud) 我已经使用实体数据模型向导为 SQL 服务器中的表创建了一个实体框架,但是我需要在 MVC 的 razor 视图中使用两个以上的模型,目前我有一个现有的 linq 查询:
控制器视图
var test = from a in db.tbl_users
where a == 2
select a;
return view (test.ToList());
Run Code Online (Sandbox Code Playgroud)
剃刀视图:
@model IEnumerable <Telephone_Search.Models.tbl_users>
@foreach (var item in model)
@HTML.DisplayFor(modelItem => item.users)
Run Code Online (Sandbox Code Playgroud)
但是我计划访问存在于我想要循环的实体框架中的其他表,像这样
@model IEnumerable <Telephone_Search.Models.'EntityFramework'>
@foreach (var item in 'entityframework')
@HTML.DisplayFor(modelItem => EntityFramework.'table'.'item')
Run Code Online (Sandbox Code Playgroud)
我试图创建一个视图模式,但是我的类在模型文件夹中是分开的,我不确定如何将这些类包装到一个视图模型中?