我记录的 Json 字符串有问题,因为它用双引号替换了"
控制器代码 :
var message = new SuccessMessagesVM()
{
Title = successMessageType == (int)EnumHelper.SuccessMessageTypes.Add ? "It's beautiful" : CustomModel.Resources.SuccessMessagesResources.EditFormSuccess,
Message = successMessageType == (int)EnumHelper.SuccessMessageTypes.Add ? CustomModel.Resources.SuccessMessagesResources.AddFormSuccess : CustomModel.Resources.SuccessMessagesResources.EditFormSuccess,
ColorCode = (int)EnumHelper.MessagesCodes.Success
};
var json = JsonConvert.SerializeObject(message);
ViewBag.SuccessMessage = successMessageType == 0 ? null : json;
Javascript只是记录ViewBag.SuccessMessage
如下:
console.log('@ViewBag.SuccessMessage');
并且对象显示为{"Message":"تم إضافة النموذج بنجاح","Title":"It's beautiful","ColorCode":3}
将所有单引号替换为 '
,将所有双引号替换为 "
我希望输出是{"Message":"تم إضافة النموذج بنجاح","Title":"It's beautiful","ColorCode":3}
这是因为您使用的是ViewBag
变量。
为了使用ViewBag
,你可以这样写:
首先,考虑到:
@{
var jss = new System.Web.Script.Serialization.JavaScriptSerializer();
var successMessageJson = jss.Serialize(ViewBag.SuccessMessage);
}
然后使用它:
<script>
//use Json.parse to convert string to Json
var successMessageInfo = JSON.parse('@Html.Raw(successMessageJson)');
</script>
有几个不同的问题和几种不同的方法,OP 没有给我们任何视图代码,所以这只是一些猜测。
我的感觉是,您应该只从您的方法返回SuccessMessagesVM
,并在您的视图中单独访问属性(可能使用 @Html.DisplayFor 和 HTML)。这将确保从一开始就不会创建任何多余的引号,并让您完全控制值的显示方式。
您不应期望console.log(@ViewBag.Anything)
正确显示。如果您需要将数据作为JavaScript对象,请不要将其粘贴在ViewBag中,因为它将呈现为HTML。
必须写入 JavaScript 对象,你可以,但它引出了一个问题,如果你想要的只是数据,为什么不使用 ajax 请求?