在Razor中将viewmodel属性编码为JavaScript

Mar*_*arc 3 c# razor asp.net-mvc-3

我有一个简单的ViewModel:

public class IndexViewModel
{
    public bool ShowWelcomeMsg { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

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

<script type="text/javascript">
    var ShowWelcomeMsg = @Model.ShowWelcomeMsg;
</script>
Run Code Online (Sandbox Code Playgroud)

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

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

mar*_*nda 5

这应该做的工作:

<script type="text/javascript">
    var ShowWelcomeMsg = @Html.Raw(Model.ShowWelcomeMsg);
</script>
Run Code Online (Sandbox Code Playgroud)

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

public class IndexViewModel
{
    public string ShowWelcomeMsg { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

要序列化为json,您应该:

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

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