所以我有一个控制器动作,它接受一个字符串并返回一个 JsonResult:
public JsonResult GetMemberJSON(string memberNumber)
{
var t = new { foo = memberNumber }; // does more crap, greatly simplified here....
return Json(t, JsonRequestBehavior.AllowGet);
}
我想将该 JSON 直接“打印”到视图的 HTML 中,以便从该视图运行的 JavaScript 可以在页面加载时看到 JSON。我不想在这个 JSON 中使用 Ajax,我没有理由说我不能以某种方式在代码中获取这个 JSON。
我需要保存这个 JSON 的 ViewModel 是:
public class MakePaymentViewModel : IValidatableObject
{
public MyClassBlah Blah { get; set; }
public string MemberJSONInfo { get; set }
public void LoadThings(string memberNumber)
{
this.Blah = MyClassBlah.Get(memberNumber);
this.MemberJSONInfo = ""; // what goes here???
}
}
我将 JSON 字符串作为 JavaScript 代码处理的视图是:
<div>
<script>
$(document).ready(function () {
var json = @(new HtmlString(Model.MemberPACJSONInfo)); // mixing JS and Razor here....
Library.PaymentDetailManager.BlockPACFieldsAsNeeded(json);
});
</script>
</div>
我知道如果控制器操作返回 String 而不是 JsonResult,我可以让它工作,但这对我来说感觉不对。此外,如果我通过 System.Web.Script.Serialization.JavaScriptSerializer() 运行 JsonResult(这似乎很愚蠢),我会得到有效的 JSON,但它看起来像:
// viewmodel
var cont = new MembershipCenter.Controllers.MembershipController();
var oSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();
var jsonResult = cont.GetMemberJSON(this.Member.Id);
this.MemberPACJSONInfo = oSerializer.Serialize(jsonResult);
// here's how it renders in the View
{"ContentEncoding":null,"ContentType":null,"Data":{"foo":"990006"},"JsonRequestBehavior":0}
以上是我能要求的最好的吗?我想它可以工作,但我想知道为什么在 JsonResult 上调用 ToString() 不只是打印出 JSON?