2016-08-01 5 views
1

からListクラスの拡張プロパティにアクセスする私はリストから継承し、次のように、この基本クラスにいくつかのより多くのプロパティが追加されたクラスがあります。JavaScriptの

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

を、私はクラスのこの種を返すMVCコントローラを持っています:

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

私の問題は、私は、サーバーへのAJAX呼び出しを行うと、クラスのこの種を受け取る時はいつでも、私はMyNewPropertyへのアクセスを持っていないということです。それは、常にMyNewPropertyためundefinedを返しますが、JavaScriptはリストオブジェクトとして扱います:

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

私は我々がListクラスから継承するべきではないことが示唆されていることを知っているが、これは、プロジェクトと私の既存のクラスとロジックですそれを変更することはできません。とにかくこのオブジェクトをJavaScriptに送る方法を見つけなければなりません。

誰でも私にこれを手伝ってもらえますか?

答えて

0

私はあなたが与えられた以下のようにモデルを変更した場合、我々は必要な結果を得ることができることを示唆している:

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

コントローラのメソッドは次のようになることを

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呼び出しがそのようになります

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

代わりに、モデルstを変更せずにコントローラメソッドを変更した場合ructure。これを試すことができます:

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

希望すると助かります。

+0

答えをありがとう。私の質問の最後に述べたように、私はレガシー目的のためにクラスの構造を変更することはできません。私はリストクラスから継承するしかない。コントローラメソッドで – hosjay

+0

を変更できますか?コントローラーメソッドのいくつかの変更を加えれば、これは実現可能です – Paarth

+0

はい、それは仕事をすることができます。ありがとう。しかし、このケースでは、1つのプロパティに値を与えることを忘れてしまった場合、複製/矛盾を引き起こすすべての単一のプロパティを入力して入力する必要があります。そうでなければ、私はこれが道だと思う。もし私がMyNewListクラスに特別な属性を追加できたら、私の問題はもっと簡単に修正されるだろう... – hosjay