2016-08-01 8 views
1

ich eine Klasse, die von Liste erbt und ergänzt diese Basisklasse einige weitere Eigenschaften wie folgt:Zugriff auf erweiterten Eigenschaften eines List-Klasse von JavaScript

public class MyNewList: List<string> 
{ 
    public string MyNewProperty { get; set; } 
} 

Ich habe eine MVC-Controller, die diese Art von Klasse zurückgibt :

public JsonResult GetModel() 
{ 
    var model = new MyNewList() { "1", "2", "3" }; 
    model.MyNewProperty = "I want to be shown!!!"; 
    return Json(model); 
} 

Mein Problem ist, dass, wenn ich einen ajax-Aufruf an den Server und erhalten so eine Klasse zu machen, ich habe keinen Zugriff auf MyNewProperty. Es gibt immer undefined für MyNewProperty, aber JavaScript behandelt das Objekt als Liste:

$http(... 
    function success(result) { 
     console.log(result) // ["1", "2", "3"] 
     console.log(result.myNewProperty); // undefined 
    } 

Ich weiß, dass es wird vorgeschlagen, dass wir nicht von List-Klasse erben, aber dies ist eine vorhandene Klasse und Logik im Projekt und ich kann es nicht ändern. Ich muss einen Weg finden, dieses Objekt trotzdem an JavaScript zu senden.

Könnte mir jemand dabei helfen?

Antwort

0

Ich schlage vor, dass, wenn Sie Ihr Modell als gegebene Folge ändern, können wir Ergebnis erforderlich erhalten:

public class MyNewList 
    { 
     public List<string> data { get; set; } 
     public string myNewProperty { get; set; } 
    } 

Controller-Methode wird wie sein, dass

public JsonResult GetModel() 
     { 
      var model = new MyNewList(); 
      model.data=new List<string>(){ "1", "2", "3" }; 
      model.myNewProperty = "I want to be shown!!!"; 
      return Json(model); 
     } 

JavaScript Ajax-Aufruf wie die

sein
$http(... 
     function success(result) { 
      console.log(result.data) // ["1", "2", "3"] 
      console.log(result.myNewProperty); // "I want to be shown!!!" 
     } 

abwechselnd, wenn wir einige Änderungen in der Controller-Methode vornehmen, ohne das Modell st zu ändern ructure. Sie können dies versuchen:

public JsonResult GetModel() 
     { 
      var model = new MyNewList(){ "1", "2", "3" }; 
      model.MyNewProperty = "I want to be shown!!!"; 
      var result=new {Data=model,newProperty=model.MyNewProperty}; 
      return Json(result); 
     } 

Ich hoffe, es wird Ihnen helfen.

+0

Danke für die Antwort. Aber, wie ich am Ende meiner Frage erwähnt habe, kann ich die Struktur der Klasse für Legacy-Zwecke nicht ändern. Ich habe keine andere Wahl, als von der List-Klasse zu erben. – hosjay

+0

können Sie die Controller-Methode ändern? Wenn einige Änderungen in der Controller-Methode vorgenommen werden, kann dies erreicht werden – Paarth

+0

Ja, das kann den Job machen. Vielen Dank. Allerdings suche ich immer noch nach einer besseren Antwort, da ich in diesem Fall jede einzelne Eigenschaft eingeben und ausfüllen muss, was zu Duplikaten/Inkonsistenzen führt, wenn ich zufällig vergess, einer Eigenschaft einen Wert zu geben. Ansonsten denke ich, das ist der Weg. Vielleicht könnte ich mein Problem leichter lösen, wenn ich der MyNewList-Klasse ein spezielles Attribut hinzufügen könnte ... – hosjay

Verwandte Themen