【问题标题】:ASP MVC - How use two models in one single viewASP MVC - 如何在一个视图中使用两个模型
【发布时间】:2014-10-08 15:31:38
【问题描述】:

我有一个有两个任务的网页 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.ProductList 模型显示数据,但是如何使用“产品”模型保存新产品项?

如何在一个视图中同时使用两个模型? 如果我在 VMProduct 模型中使用“产品”模型的属性,它是重复代码吗?

任何人都可以为此提供解决方案吗? 在此先感谢

【问题讨论】:

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


【解决方案1】:

看起来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");
}

【讨论】:

    【解决方案2】:

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

    你可以在这里获得完整的教程: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>
    

    【讨论】:

      猜你喜欢
      • 2013-08-02
      • 1970-01-01
      • 2011-07-29
      • 2018-01-21
      • 2020-08-06
      • 1970-01-01
      • 1970-01-01
      • 2010-10-15
      • 1970-01-01
      相关资源
      最近更新 更多