在将数据发送到View之前,在ASP.NET中的MVC控制器中附加到Json对象

时间:2013-10-23 16:01:05

标签: asp.net-mvc json

我正在ASP.NET中构建一个MVC应用程序。在我的索引控制器中,我正在调用API,获取数据并将它们传递给视图。 这很有效,我可以在我的视图中恢复数据。

public ActionResult Index()
{
    Base model = null;
    var client = new HttpClient();
    var task =
    client.GetAsync(
    "http://example.api.com/users/john/profile")
    .ContinueWith((taskwithresponse) =>
    {
        var response = taskwithresponse.Result;
        var readtask = response.Content.ReadAsAsync<Base>();
        readtask.Wait();
        model = readtask.Result;

    });
    task.Wait();

    return View(model);
}

我的模型如下:

public class Base
{
    public Data data { get; set; }
}

public class Data
{
    public Profile profile { get; set; }
    public Credit credit { get; set; }
}

public class Profile
{
    public String firstname { get; set; }
    public String lastname { get; set; }
}

public class Credit
{
    public int amount { get; set; }

    public string balance { get; set; }

}

API以这种格式返回数据:

{

"data": {
    "profile": {
        "firstname": "John,
        "lastname": "Newman",
    },
    "credit": {
        "amount": 30,
    "neverbought" : false
    }
}
}

我现在想要实现的是为返回的数据添加更多属性。例如,我想将一个州财产添加到信贷,这将根据金额和未买入的属性计算。 但是现在让我们说credit.state将永远是“lowCredit”。

所以我做的是添加Credit.state =“neverBought”;在将数据发送到View之前到我的Controller。然后我得到了一些错误,我的Credit类没有包含state的定义。 我将状态属性添加到我的Credit Model中,但后来我得到了“非静态字段,方法或属性需要对象引用。

以下是我使用的代码:

task.Wait();
model.credit.state = "lowCredit"; 
return View(model);

我做错了什么,我该怎么做才能解决问题?

1 个答案:

答案 0 :(得分:0)

如果您展示了用于抛出指定错误的代码,那将是很好的。但我假设您可能在异步任务完成之前完成了。只要您的模型中有可用的字段

public class Credit
{
 public int amount { get; set; }
 public string state { get; set; }
 public string balance { get; set; }
}

然后你应该能够设置它(等到异步完成

task.Wait();
model.data.credit.state = "lowCredit";
return View(model);

尝试在任务完成之前分配此值就像尝试将值分配给null并将导致运行时异常。