【问题标题】:ASP.NET MVC 3 multiple Models to single FormASP.NET MVC 3 多个模型到单个表单
【发布时间】:2011-05-22 10:36:12
【问题描述】:

我正在学习 ASP.NET MVC 3 并尝试使用单个表单创建视图,该表单由通过外键链接在一起的多个模型组成。最终目标是将单个表单插入到所有数据库表中。

问题是我无法弄清楚为什么当我右键单击创建视图时表单不是在 cshtml 文件中自动生成的。自动生成的代码有很大帮助,因为我有许多链接在一起的表,以及我必须验证和插入的许多字段。如果无法自动生成表单,那么完成此操作的最有效/最优雅的方式是什么?

这是我所拥有的简化。

型号:

class Customer
{
    [Key]
    public UInt64 CustomerId { get; set; }

    [Required(ErrorMessage = "Name is required.")]
    [Display(Name = "Customer Name")]
    [MaxLength(50)]
    public string FullName { get; set; }
}

class CustomerAdditionalDetails1
{
    [ForeignKey("Customer")]
    public UInt64 CustomerId { get; set; }

    [Required(ErrorMessage = "This info is required.")]
    [Display(Name = "Customer Information")]
    [MaxLength(50)]
    public string SomeInfo { get; set; }
}

class CustomerAdditionalDetails2
{  // same foreign key as CustomerAddtionalDetails1, but with different properties
}

class CustomerAdditionalDetails3
{  // same foreign key as CustomerAddtionalDetails1, but with different properties
}

...

public class CustomerModel
{
    public Customer Customer { get; set; }
    public CustomerAdditionalDetails1 CustomerAdditionalDetails1 { get; set; }
    public CustomerAdditionalDetails2 CustomerAdditionalDetails2 { get; set; }
    public CustomerAdditionalDetails3 CustomerAdditionalDetails3 { get; set; }
    ...
}

控制器:

public ActionResult Submit()
{
    return View();
}

[HttpPost]
public ActionResult Submit(CustomerModel customer)
{
    return View();
}

请帮忙!

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 forms multiple-tables


    【解决方案1】:

    当您生成视图时,您是在创建基于 CustomerModel 的强类型视图吗?如果您正在生成视图,则不会在页面中输出任何值,因为您的所有属性都是对其他对象的引用。您需要模型中包含的实际值类型,以便脚手架自动将它们包含在视图中。也就是说,您始终可以按照下面的示例将它们自己添加到视图中。

    我还注意到,在您的控制器中,您的 GET 方法不会将模型返回到要渲染的视图中。如果您想根据模型生成视图,则需要传递您希望它为其生成视图的对象。

    @model MvcApplication3.Models.CustomerModel
    
    @{
        ViewBag.Title = "Index";
    }
    
    <h2>Index</h2>
    
    <fieldset>
        <legend>CustomerModel</legend>
    </fieldset>
    <ul>
    <li>@Model.Customer.FullName</li>
    <li>@Model.CustomerAdditionalDetails1.SomeInfo1</li>
    <li>@Model.CustomerAdditionalDetails2.SomeInfo2</li>
    </ul>
    <p>
        @Html.ActionLink("Edit", "Edit", new { /* id=Model.PrimaryKey */ }) |
        @Html.ActionLink("Back to List", "Index")
    </p>
    
    
    public class CustomerController : Controller
        {
            public ActionResult Index()
            {
                CustomerModel customerModel = new CustomerModel() 
                { 
                    Customer = new Customer()
                    {
                        FullName = "Dan"
                    },
                    CustomerAdditionalDetails1 = new CustomerAdditionalDetails1() 
                    { 
                        SomeInfo1 = "Somewhere1" 
                    },
                    CustomerAdditionalDetails2 = new CustomerAdditionalDetails2()
                    {
                        SomeInfo2 = "Somewhere2"
                    },
                    CustomerAdditionalDetails3 = new CustomerAdditionalDetails3()
                    {
                        SomeInfo3 = "Somewhere3"
                    }
                };
    
                return View(customerModel);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2016-06-11
      • 1970-01-01
      • 1970-01-01
      • 2011-08-18
      • 2011-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多