c# - 在 Razor 中将 View 模型属性编码为 JavaScript

标签 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 等的解决方案嗯:

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

最佳答案

这应该可以完成工作:

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

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

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

关于c# - 在 Razor 中将 View 模型属性编码为 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9741445/

相关文章:

c# - 为什么 Await 之后的代码不在 UI 线程上运行?

jQuery UI 选项卡第一个加载的选项卡被缓存,尽管 ajaxOptions : cache: false is specified

c# - 传入字典的模型项是 'MyType' 类型的,但是这个字典需要一个 'MyType' 类型的模型项

asp.net - Html.ActionLink 生成的奇怪链接

javascript - 如何在 Razor 中将复杂对象存储在 jQuery/数据属性中?

c# - Newtonsoft JSON 反序列化使用 HttpWebResponse

c# - 如何隐藏快速访问工具栏中的按钮?

c# - 在 .NET 中创建有效的数据包嗅探器

asp.net-mvc-3 - ASP.NET MVC - 带有 HtmlString 的 Ajax.ActionLink

c# - Html.BeginRouteForm 不会为命名路由生成 URL