【问题标题】:How to read string message from ViewBag to Javascript object?如何从 ViewBag 读取字符串消息到 Javascript 对象?
【发布时间】:2020-01-25 09:13:48
【问题描述】:

我有这个返回错误消息的操作方法,它确实做到了:

var content = responsePost.Content.ReadAsStringAsync().Result;
model = JsonConvert.DeserializeObject<MyAPIResponse>(content);
ViewBag.Message = model.message;

在我的 Razor 视图页面中,我尝试使用以下代码阅读它:

@{ 
    var jss = new System.Web.Script.Serialization.JavaScriptSerializer();
    var userInfoJson = jss.Serialize(ViewBag.Message);
}
<script>
    var errors = JSON.parse('@Html.Raw(userInfoJson)');
    $(document).ready(function () {
    for (var i = 0; i < errors.Count; i++)
    {

    }
});
</script>

但是渲染回来的输出是:

<script>
    var errors = JSON.parse('"[\"Passwords must have at least one non letter or digit character. Passwords must have at least one lowercase (\u0027a\u0027-\u0027z\u0027). Passwords must have at least one uppercase (\u0027A\u0027-\u0027Z\u0027).\"]"');
    $(document).ready(function () {
    for (var i = 0; i < errors.Count; i++)
    {

    }
});
</script>

我在 UI 中使用 C# MVC Razor,在我的 API 中使用 Identity 作为密码策略。

【问题讨论】:

    标签: javascript c# json asp.net-mvc


    【解决方案1】:

    在控制器中,只需设置包中的对象即可:

    public ActionResult Index()
    {
        var errors = new[] { "error1", "error2" };
        ViewBag.Errors = errors;
        return View();
    }
    

    然后在视图中序列化并使用它:

    <script>
        var errors = @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(ViewBag.Errors))
        errors.forEach(item => { alert(item);});
    </script>
    

    注意:

    • 如果你的包里没有数组,例如ViewBag.Errors = "error1",那么不要使用forEach,使用alert(errors);

    • JSON.parse 在这种情况下是不必要的。您没有收到来自服务器的字符串,而是在响应中呈现 html 内容和 javascript。

    【讨论】:

      猜你喜欢
      • 2011-06-16
      • 1970-01-01
      • 2018-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-11
      • 2018-06-02
      • 1970-01-01
      相关资源
      最近更新 更多