在Razor中将viewmodel属性编码为JavaScript

时间:2012-03-16 17:00:51

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

我有一个简单的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中)中使用它的正确方法是什么?

2 个答案:

答案 0 :(得分:5)

这应该做的工作:

<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中的任何其他对象。

答案 1 :(得分:0)

您可以自己处理转换:

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