MVC4剃刀在客户端javascript中从我的模型访问JsonResult数据

时间:2012-07-11 13:32:09

标签: javascript json asp.net-mvc-4 jsonresult

我正在研究一个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数据。 我究竟做错了什么?有人可以指出我正确的方向

3 个答案:

答案 0 :(得分:5)

我使用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>

答案 1 :(得分: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 app中正确。

答案 2 :(得分:0)

JsonResult往往被用作您打算从Ajax调用的操作方法的返回类型。

您需要使用JavaScriptSerializer序列化“myroles”对象。 E.g。

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

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

public string JsonRoles { get; set; }

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

var data = @Html.Raw(Model.JsonRoles);
alert(data.id);