【问题标题】:Accessing extended properties of a List class from JavaScript从 JavaScript 访问 List 类的扩展属性
【发布时间】:2016-12-06 02:53:58
【问题描述】:

我有一个继承自 List 的类,并向这个基类添加了更多属性,如下所示:

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。

谁能帮我解决这个问题?

【问题讨论】:

    标签: javascript c# angularjs asp.net-mvc inheritance


    【解决方案1】:

    我建议如果您按照以下方式更改模型,我们可以获得所需的结果:

    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!!!"
            }
    

    或者,如果我们在不改变模型结构的情况下对 Controller 方法进行一些更改。你可以试试这个:

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

    希望它会有所帮助。

    【讨论】:

    • 感谢您的回答。但是,正如我在问题末尾提到的那样,我不能为了遗留目的而改变类的结构。我别无选择,只能从 List 类继承。
    • 你能改变控制器方法吗?如果对控制器方法进行了一些更改,这可以实现
    • 是的,可以完成这项工作。谢谢。但是,仍然在寻找/等待更好的答案,因为在这种情况下,如果我碰巧忘记给一个属性赋值,我必须键入并填写每一个导致重复/不一致的属性。否则,我认为是这样。也许如果我可以为 MyNewList 类添加一个特殊属性,我的问题会更容易解决......
    猜你喜欢
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    • 2018-07-12
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 2017-12-09
    • 1970-01-01
    相关资源
    最近更新 更多