2012-04-04 20 views
0

Ich habe ein seltsames Problem mit verschachtelten Eigenschaften .. nicht sicher, ob dies beabsichtigt ist? Wenn ich macheverschachtelte Modelleigenschaften funktionieren nicht mit @ Html.EditorFor?

@Html.EditorFor(model => model.Name) 

der Post funktioniert und das Modell ist ausgefüllt. Wenn ich

tun, anstatt
@Html.EditorFor(model => model.Detail.Name) 

model.Detail.Name am Pfosten null ist .. Gibt es etwas Besonderes Ich brauche für diese zu arbeiten, zu tun?

+0

Können Sie bitte die Definition für Ihr Modell zeigen? –

+0

ModelClass - Name {get; set;} Detail {get; set}. DetailClass - Name {get; set} und ModelClass() does this.Detail = new DetailClass() – XeroxDucati

+0

Ist die Name-Eigenschaft von Detail als public definiert? 'öffentliche Zeichenkette Name {get; einstellen;} '? Ist die Detaileigenschaft des Modells als öffentlich definiert? 'public Detail Detail {erhalten; einstellen; } '? –

Antwort

1

Das sollte funktionieren. Ich kann nicht repro.

Modell:

public class ModelClass 
{ 
    public string Name { get; set; } 
    public DetailClass Detail { get; set; } 
} 

public class DetailClass 
{ 
    public string Name { get; set; } 
} 

Controller:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     var model = new ModelClass 
     { 
      Name = "model name", 
      Detail = new DetailClass 
      { 
       Name = "detail name" 
      } 
     }; 
     return View(model); 
    } 

    [HttpPost] 
    public ActionResult Index(ModelClass model) 
    { 
     return Content(
      string.Format(
       "name: {0}, detail.name: {1}", 
       model.Name, 
       model.Detail.Name 
      ) 
     ); 
    } 
} 

Ausblick:

@model ModelClass 

@using (Html.BeginForm()) 
{ 
    @Html.EditorFor(x => x.Name) 
    @Html.EditorFor(x => x.Detail.Name) 
    <button type="submit">OK</button> 
} 

Die 2 Objekte korrekt gebunden sind.

0

Wenn Sie EntityFramework verwenden, sollten Sie das Kind in die Abfrage einschließen.

Zum Beispiel:

public MyClass getById(int id){ 
    return DbSet.Include(q => q.Detail).SingleOrDefault(q => q.Id == id); 
} 

Dann, wenn Sie Ihr Modell nennen das Detail wird enthalten sein. So können Sie Name.Detail.Name verwenden.

Verwandte Themen