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

MVC4 razor accessing JsonResult data from my model in client side javascript

本文关键字:模型 JsonResult 数据 我的 访问 客户端 javascript MVC4 剃刀      更新时间:2023-09-26

我正在进行一个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数据。我做错了什么?有人能告诉我正确的方向吗?

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

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

在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应用程序中是正确的。