Asp.net mvc ASP MVC-如何在一个视图中使用两个模型
我有一个网页,有两个任务 1) 添加新产品 2) 在表格中显示现有产品(参见下图) 此外,我有两个以上的任务类 用于显示现有详细信息和保存新产品Asp.net mvc ASP MVC-如何在一个视图中使用两个模型,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 4,我有一个网页,有两个任务 1) 添加新产品 2) 在表格中显示现有产品(参见下图) 此外,我有两个以上的任务类 用于显示现有详细信息和保存新产品 public class VMProduct { public List<Product>ProductList { get; set; } } public class Product { public String ProductID { get; set; } public String ProductN
public class VMProduct
{
public List<Product>ProductList { get; set; }
}
public class Product
{
public String ProductID { get; set; }
public String ProductName { get; set; }
public String Uom1 { get; set; }
public String Uom2 { get; set; }
public String ProductCategoryID { get; set; }
}
公共类VMProduct
{
公共ListProductList{get;set;}
}
公共类产品
{
公共字符串ProductID{get;set;}
公共字符串ProductName{get;set;}
公共字符串Uom1{get;set;}
公共字符串Uom2{get;set;}
公共字符串ProductCategoryID{get;set;}
}
我的问题是我可以使用VMProduct.ProductList模型显示数据,但如何使用“product”模型保存新产品项
如何在一个视图中使用两个模型?
如果我在VMProduct模型中使用“product”模型的属性,这是重复代码,对吗
有人能找到解决办法吗?
提前感谢看起来,
VMProduct
已经是一个自定义视图模型(我主要是根据它的名称猜测),所以只需向它添加一个您需要的类型的属性:
public class VMProduct
{
public List<Product> ProductList { get; set; }
public Product NewProduct { get; set; }
}
这里解释了如何在MVC4中实现1个视图中的2个模型。有时需要实现一个页面,其中一个视图(页面)中存在两个表单,如同一视图中的登录和注册 您可以在此处获得完整的教程: 以下是示例代码: 创建的视图模型:
public class UsersLoginRegister
{
public User User { get; set; }
public Login Login { get; set; }
}
用户实体
public partial class User
{
public int UserID { get; set; }
[Required]
public string Username { get; set; }
[Required]
[DataType(System.ComponentModel.DataAnnotations.DataType.Password)]
public string Password { get; set; }
[Required]
public string FullName { get; set; }
}
登录实体
public class Login
{
[Required]
public string UserName { get; set; }
[Required]
[DataType( System.ComponentModel.DataAnnotations.DataType.Password)]
public string Password { get; set; }
}
在视图(Html)代码中:
登录
登记
@使用(Html.BeginForm(“Login”、“Home”、FormMethod.Post))
{
用户名:
@Html.TextBoxFor(a=>a.Login.Username)
密码:
@EditorFor(a=>a.Login.Password)
}
@使用(Html.BeginForm(“Register”、“Home”、FormMethod.Post))
{
全名:
@Html.TextBoxFor(a=>a.User.FullName)
用户名:
@Html.TextBoxFor(a=>a.User.Username)
密码:
@EditorFor(a=>a.User.Password)
}
简单。只需创建另一个属性为Product和VMProduct的类。之后,您可以将该类提供给view。的可能重复项另请参见:,就您关于代码重复的观点而言,您必须平衡单一责任(SRP)和DRY。更新工作单元请求模型(例如:
AddProductRequest
)和响应模型(例如:ProductResults
,这是一个列表
)都是很好的候选对象,可以添加到传递到页面的单个视图模型中。控制器操作将把AddProductRequest
作为参数,将其发送到db,然后将其重新选择为ProductgResult
,并通过ViewModel将其返回到视图。属性将被复制,但它们的函数不会被复制。
public class Login
{
[Required]
public string UserName { get; set; }
[Required]
[DataType( System.ComponentModel.DataAnnotations.DataType.Password)]
public string Password { get; set; }
}
<table>
<tr>
<td><b>Login</b></td>
<td><b>Register</b></td>
</tr>
<tr>
<td>
@using (Html.BeginForm("Login", "Home", FormMethod.Post))
{
<table>
<tr>
<td>Username : </td>
<td>@Html.TextBoxFor(a => a.Login.Username)</td>
</tr>
<tr>
<td>Password : </td>
<td>@Html.EditorFor(a => a.Login.Password)</td>
</tr>
<tr>
<td></td>
<td> <input type="submit" value="Submit" /></td>
</tr>
</table>
}
</td>
<td>
@using (Html.BeginForm("Register", "Home", FormMethod.Post))
{
<table>
<tr>
<td>Fullname : </td>
<td>@Html.TextBoxFor(a => a.User.FullName)</td>
</tr>
<tr>
<td>Username : </td>
<td>@Html.TextBoxFor(a => a.User.Username)</td>
</tr>
<tr>
<td>Password : </td>
<td>@Html.EditorFor(a => a.User.Password)</td>
</tr>
<tr>
<td></td>
<td>
<input type="submit" value="Submit" />
</td>
</tr>
</table>
}
</td>
</tr>