Asp.net mvc ASP MVC-如何在一个视图中使用两个模型

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

我有一个网页,有两个任务 1) 添加新产品 2) 在表格中显示现有产品(参见下图)

此外,我有两个以上的任务类 用于显示现有详细信息和保存新产品

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>