4

我正在开发一个 MVC4 剃须刀项目。我有一个角色对象列表,我作为 jsonResult 存储在我的模型上,打算在我的客户端 javascript 中使用。

//Model
public JsonResult JsonRoles { get; set; }

//Controller
var myroles = from r in myroles select new { r.Id, r.Description };
var myModel.JsonRoles = Json(myroles);


//Client side javascript
var data = '@(Model.JsonRoles)';
alert(data);

我试图在 javascript 中访问它,如下所示。当我发出警报时,我总是得到字符串“System.Web.Mvc.JsonResult”,但我需要的是 json 数据。我究竟做错了什么?有人可以指出我正确的方向吗

4

3 回答 3

6

我已经使用 ViewData 解决了您的问题,并且我能够在类似的行上获得结果,您也可以解决模型属性

//Contoller Class 
 public ActionResult CreateRequest()
        {

            var data = new { Id = "one", Make = "Two" };


            ViewData["Data"] = Json(data);

            return View();

        }

//And client side is 

  <script type="text/javascript">
        var data = @Html.Raw(Json.Encode(ViewData["Data"]));
        alert(JSON.stringify(data.Data));
    </script>
于 2012-07-11T13:50:12.683 回答
0

在 linqpad 中,我能够通过

var x= new System.Web.Mvc.JsonResult();
x.Data=new System.Web.Script.Serialization.JavaScriptSerializer().Serialize("testing, testing");
x.Data.Dump();

还检查了

var x= new System.Web.Mvc.JsonResult();
x.Data=new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(new{test="testing"});
x.Data.Dump();

这可能不是剃刀页面的正确解决方案。我预计

var data = "@{Model.JsonRoles.ExecuteResult(this.ControllerContext);}";

在适当的 mvc 应用程序中正确。

于 2012-07-11T13:52:21.977 回答
0

JsonResult倾向于用作您打算从 Ajax 调用的操作方法的返回类型。

您需要使用JavaScriptSerializer来序列化您的“myroles”对象。例如

JavaScriptSerializer serializer = new JavaScriptSerializer();
myModel.JsonRoles = serializer.Serialize(myroles);

将模型上的 JsonRoles 类型更改为字符串。

public string JsonRoles { get; set; }

最后,在您的视图中输出例如:

var data = @Html.Raw(Model.JsonRoles);
alert(data.id);
于 2012-07-11T14:01:16.463 回答