0

In unserer Datenbank gibt es viele Tabellen mit einigen Commons Spalten (Adressspalten). Ich möchte nicht mehrmals den gemeinsamen Spalten Teil kopieren und einfügen. Ich möchte das Formular in 2 Dateien aufteilen, die Hauptvorlage und die gemeinsame Vorlage. Dann benutze das Gemeinsame in eine andere Ansicht.Wie teilen Sie eine ASP.Net MVC-Editor-Formularansicht in zwei oder mehr Dateien auf?

Bitte beachten Sie, dass die gemeinsamen Spalten und anderen Spalten in der gleichen Klasse ist, die gemeinsame ist keine andere Klasse. Ich kann keine Editor-Vorlagen dafür verwenden.

zum Beispiel, nehmen Sie dies:

@model SGD.Models.Fornecedor 
@using (Html.BeginForm()) { 

    @Html.LabelFor(model => model.att1) 
    @Html.EditorFor(model => model.att1) 

    @Html.LabelFor(model => model.att2) 
    @Html.EditorFor(model => model.att2) 

    @Html.LabelFor(model => model.att3) 
    @Html.EditorFor(model => model.att3) 

    @Html.LabelFor(model => model.att4) 
    @Html.EditorFor(model => model.att4) 
} 

und in diesen Dateien machen: Hauptansicht

@model SGD.Models.Fornecedor 
@using (Html.BeginForm()) { 

    @Html.LabelFor(model => model.att1) 
    @Html.EditorFor(model => model.att1) 

    @// reference to common template 

    @Html.LabelFor(model => model.att4) 
    @Html.EditorFor(model => model.att4) 
} 

Eine häufige Form Teil

@Html.LabelFor(model => model.att2) 
    @Html.EditorFor(model => model.att2) 

    @Html.LabelFor(model => model.att3) 
    @Html.EditorFor(model => model.att3) 
+1

Wenn 'att2' und' att3' sind über gemeinsame mehrere Klassen, warum haben Sie keine BaseModel-Klasse, von der die anderen Klassen erben? –

+0

Was hat die Datenbank damit zu tun? Erstelle einfach 'public class BaseModel {public string att2 {get; einstellen; } .....} 'und dann' Fornecedor' erbt von 'BaseModel' (und enthält nur' att1' und 'att4') Dann können Sie' EditorTemplate' für typeof 'BaseModel' erstellen. –

+0

Entschuldigung, ich habe Ihren Kommentar missverstanden. Ich verstehe es jetzt, aber wie kann ich EditorTemplate verwenden, um die aktuelle Klasseninstanz basierend auf der Modellvorlage der Elternklasse zu bearbeiten? Ich kenne EditorTemplates nur, um Unterklassen zu bearbeiten. –

Antwort

1

Ich denke, was Sie‘ Ich brauche nur das Ansichtsmodellmuster zu verwenden. Sie können übergeordnete und untergeordnete Ansichtsmodelle haben. Das übergeordnete Element kann mehrere Typen von Modellen aus der DB in einem überladenen Konstruktor akzeptieren. Jetzt können Sie eine Editor-Vorlage für Ihr Child-View-Modell erstellen.

public partial class Company 
{ 
    public string Att1 { get; set; } 
    public string Att2 { get; set; } 
    public string Att3 { get; set; } 
    public string Att4 { get; set; } 
} 

public partial class Company2 
{ 
    public string Att1 { get; set; } 
    public string Att2 { get; set; } 
    public string Att3 { get; set; } 
    public string Att4 { get; set; } 
} 
public class Parent 
{ 
    [Display(Name = "*Attribute One")] 
    [Required(ErrorMessage = "*Required")] 
    public string Att1 { get; set; } 

    [Display(Name = "*Attribute Four")] 
    [Required(ErrorMessage = "*Required")] 
    public string Att4 { get; set; } 

    public Child child { get; set; } 

    public Parent(){} 

    public Parent(Company company) 
    { 
     Att1 = company.Att1; 
     Att4 = company.Att4; 

     child = new Child(company.Att2, company.Att3); 
    } 

    public Parent(Company2 company) 
    { 
     Att1 = company.Att1; 
     Att4 = company.Att4; 

     child = new Child(company.Att2, company.Att3); 
    } 

} 

public class Child 
{ 
    [Display(Name = "*Attribute Two")] 
    [Required(ErrorMessage = "*Required")] 
    public string Att2 { get; set; } 

    [Display(Name = "*Attribute Three")] 
    [Required(ErrorMessage = "*Required")] 
    public string Att3 { get; set; } 

    public Child() { } 

    public Child(string Att2, String Att3) 
    { 
     this.Att2 = Att2; 
     this.Att3 = Att3; 
    } 

} 

public class HomeController : Controller 
{ 
    // 
    // GET: /Home/ 

    public ActionResult Index() 
    { 
     Parent testParent = new Parent(new Company()); 

     return View(testParent); 
    } 

} 

Und hier sind Ihre Ansichten: ist die übergeordnete Ansicht

@model MvcApplication1.Parent 

@{ 
    ViewBag.Title = "Index"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

<h2>Index</h2> 

@using (Html.BeginForm()) { 

    @Html.LabelFor(model => model.Att1)<br /> 
    @Html.EditorFor(model => model.Att1) 

    @Html.EditorFor(model => model.child)<br /> 

    @Html.LabelFor(model => model.Att4)<br /> 
    @Html.EditorFor(model => model.Att4) 
} 

Und Dieser geht in den editorTemplates

@model MvcApplication1.Child 

@Html.LabelFor(model => model.Att2) 
@Html.EditorFor(model => model.Att2) 

@Html.LabelFor(model => model.Att3) 
@Html.EditorFor(model => model.Att3)