2011-05-22 21 views
8

estoy aprendiendo ASP.NET MVC 3 y tratando de crear una vista con un único formulario que se compone de varios modelos vinculados entre sí por una clave externa. El objetivo final es que el formulario único se inserte en todas las tablas de la base de datos.ASP.NET MVC 3 a múltiples modelos solo Formulario

El problema es que no puedo entender por qué cuando haga clic derecho para crear la opinión de que el formulario no se genera automáticamente en el archivo cshtml. El código generado automáticamente me ayuda mucho ya que tengo muchas tablas que se vinculan entre sí, y muchos campos que debo validar e insertar. Si no es posible generar automáticamente el formulario, ¿cuál es la forma más eficiente/elegante de hacerlo?

Aquí es una simplificación de lo que tengo.

Modelo:

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; } 
    ... 
} 

controlador:

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

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

Por favor, ayuda!

Respuesta

7

Al generar la vista, está creando una visión fuertemente tipado basado en CustomerModel? Si está generando una vista, no generará ningún valor en la página porque todas sus propiedades son referencias a otros objetos. Necesita tipos de valores reales contenidos en el modelo para que el andamio los incluya automáticamente en la vista. Dicho esto, siempre puede agregarlos en la vista usted mismo como se muestra en el siguiente ejemplo.

También noto en su controlador que su método GET no devuelve un modelo para el fin de rendir. Si desea que se genere una vista basada en el modelo, debe pasar el objeto para el que desea que se genere.

@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); 
     } 
    } 
Cuestiones relacionadas