在控制器中我有
public JsonResult Index()
{
List<TutorialModel> models = new List<TutorialModel>();
model.TitleWord = "Go";
model.Colors = new List<bool>();
model.Colors.Add(true);
model.Colors.Add(false);
model.Colors.Add(false);
model.Colors.Add(false);
model.PossibleAnswers = new List<string>();
model.PossibleAnswers.Add("1");
model.PossibleAnswers.Add("2");
model.PossibleAnswers.Add("3");
model.PossibleAnswers.Add("4");
string ser = (new System.Web.Script.Serialization.JavaScriptSerializer()).Serialize(model);
return Json(ser, JsonRequestBehavior.AllowGet);
}
当我在视野中尝试用
捕捉这个Json结果时<script>
var values = json.parse(@Model)
</script>
浏览器显示我的序列化字符串。我如何反序列化这个json元素并存储在一些变量中。
我对此控制器的模型:
public class TutorialModel
{
public string TitleWord { get; set; }
public List<string> PossibleAnswers { get; set; }
public List<bool> Colors { get; set; }
}
答案 0 :(得分:2)
请注意,在您的Controller中,您不需要返回JsonResult
- 除非您将其称为ajax方法或其他内容。在这种情况下,请尝试正常返回ActionResult
(或ViewResult
)。你可以这样做:
public ActionResult Index()
{
List<TutorialModel> models = new List<TutorialModel>();
//...add items to list
return View(models);
}
然后在你的cshtml javascript中:
<script>
var model = @(Html.Raw(Json.Encode(Model)));
<script>
答案 1 :(得分:0)
问题是你要返回一个JsonResult,所以所有发送到浏览器的都是你的JSON,而不是你想要的视图。
您需要返回一个ViewResult:
public ViewResult Index()
{
List<TutorialModel> models = new List<TutorialModel>();
model.TitleWord = "Go";
model.Colors = new List<bool>();
model.Colors.Add(true);
model.Colors.Add(false);
model.Colors.Add(false);
model.Colors.Add(false);
model.PossibleAnswers = new List<string>();
model.PossibleAnswers.Add("1");
model.PossibleAnswers.Add("2");
model.PossibleAnswers.Add("3");
model.PossibleAnswers.Add("4");
string ser = (new System.Web.Script.Serialization.JavaScriptSerializer()).Serialize(model);
return View("Index", ser);
}
然后在您的视图中,您可以:
<script>
var values = JSON.parse("@Model")
</script>