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

时间:2014-10-08 15:31:38

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

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

enter image description here

每个上面的任务我也有两个班级 用于显示现有详细信息并保存新产品

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.ProductList模型显示数据,但我如何使用&#34; product&#34;来保存新产品。模特?

如何在一个视图中使用这两个模型? 如果我使用&#34;产品&#34; VMProduct模型中的模型属性是重复代码吗?

任何人都可以为此解决问题吗? 提前谢谢

2 个答案:

答案 0 :(得分:0)

看起来VMProduct已经是一个自定义视图模型(我大多用它的名字来猜测),所以只需要为你需要的类型添加一个属性:

public class VMProduct
{
    public List<Product> ProductList { get; set; }
    public Product NewProduct { get; set; }
}

尽管如此,除非我误解了你的用户体验,否则这可能就没有必要了。用于呈现视图的模型不一定需要是与该视图上的任何给定表单接收的相同模型。因此,您可以继续使用现在的VMProduct对象呈现视图,添加产品的表单仍然可以将Product的实例发布到调用添加操作的控制器操作。类似的东西:

public ActionResult Add()
{
    // create your view model
    return View(someVMProduct);
}

[HttpPost]
public ActionResult Add(Product newProduct)
{
    // add the product to the backing data store
    return RedirectToAction("Add");
}

答案 1 :(得分:0)

这里解释了如何在MVC 4中的1个视图中实现2模型。有时需要实现一个页面,其中2个表单存在于单个视图(页面)中,如Login&amp;在同一视图中注册。

您可以在此处获得完整的教程:http://dotnetawesome.blogspot.com/2013/09/2-model-in-1-view-in-mvc-4.html

以下是示例代码:

创建的ViewModel:

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)代码中:

<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>