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