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