【问题标题】:Encode viewmodel properties to JavaScript in Razor在 Razor 中将视图模型属性编码为 JavaScript
【发布时间】:2012-03-16 17:00:50
【问题描述】:

我有一个简单的 ViewModel:

public class IndexViewModel
{
    public bool ShowWelcomeMsg { get; set; }
}

在我看来,我需要 JS 中的这个属性:

<script type="text/javascript">
    var ShowWelcomeMsg = @Model.ShowWelcomeMsg;
</script>

但这不正确,因为它输出 False 而不是 false 但无论如何,这个问题更通用,因为我也想知道 int、string 等的解决方案:

编码 viewmodel 属性以在 JavaScript(在 Razor 中)使用它的正确方法是什么?

【问题讨论】:

    标签: c# asp.net-mvc-3 razor


    【解决方案1】:

    这应该可以完成工作:

    <script type="text/javascript">
        var ShowWelcomeMsg = @Html.Raw(Model.ShowWelcomeMsg);
    </script>
    

    您应该首先序列化您的数据。你应该传递一个带有 json 表示法的字符串,而不是传递一个布尔值:

    public class IndexViewModel
    {
        public string ShowWelcomeMsg { get; set; }
    }
    

    为了序列化为 json 你应该这样做:

    public ActionResult Index()
    {
        var serializer = new JavaScriptSerializer();
        var vm = new IndexViewModel
        {
             ShowWelcomeMsg = serializer.Serialize(true)
        };
        return View(vm);
    }
    

    这样您甚至可以序列化整个 C# 对象并将其用作 JavaScript 中的任何其他对象。

    【讨论】:

    • 非常感谢,这是一个很好的方法,我想我会构建一个自定义的 html 助手,它将它编码为 json。我绝对不想在控制器或视图模型中这样做。我只是想知道为什么这不是内置的,或者我找不到它......
    • 当然!您既不希望在控制器中也不在视图模型中使用该代码,html 助手听起来像是一种干净的方法,很高兴我的回答对您有所帮助
    【解决方案2】:

    您可以自己处理转换:

    <script type="text/javascript">
        var ShowWelcomeMsg = @(Model.ShowWelcomeMsg ? "true" : "false");
        var WelcomeMsg = "@Model.WelcomeMsg.Replace("\r\n", "<br />")";
    </script>
    

    【讨论】:

    • 这适用于我的简单示例,但是带有换行符的字符串呢?
    猜你喜欢
    • 2013-12-20
    • 1970-01-01
    • 2021-12-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多