如何从 JS 访问 ViewBag

Posted

技术标签:

【中文标题】如何从 JS 访问 ViewBag【英文标题】:How do I access ViewBag from JS 【发布时间】:2012-04-17 23:28:45 【问题描述】:

我尝试过的方法。

通过浏览器查看 JS,@ViewBag.CC 只是空白...(缺失)

        var c = "#" + "@ViewBag.CC";
        var d = $("#" + "@ViewBag.CC").value;
        var e = $("#" + "@ViewBag.CC").val();

        var c = "@ViewBag.CC";
        var d = $("@ViewBag.CC").value;
        var e = $("@ViewBag.CC").val();

【问题讨论】:

【参考方案1】:

如果您使用的是剃须刀引擎模板,请执行以下操作

在你看来写:

<script> var myJsVariable = '@ViewBag.MyVariable' </script>

更新: 更合适的方法是在主布局上定义一组配置,例如基本 url、facebook API 密钥、Amazon S3 基本 URL 等...```

<head>
 <script>
   var AppConfig = @html.Raw(Json.Encode(new 
    baseUrl: Url.Content("~"),
    fbApi: "get it from db",
    awsUrl: "get it from db"
   ));
 </script>
</head>

您可以在 javascript 代码中使用它,如下所示:

<script>
  myProduct.fullUrl = AppConfig.awsUrl + myProduct.path;
  alert(myProduct.fullUrl);
</script>

【讨论】:

为什么@&lt;script&gt; 之前? 在Script前减去@符号,这是正确答案。谢谢 使用传统 @amd 这很有帮助。 +1【参考方案2】:

试试:var cc = @Html.Raw(Json.Encode(ViewBag.CC)

【讨论】:

@Doomsknight。我希望你不要使用它。 在这种情况下,检查 ViewBag.CC 服务器端的值,在某些情况下您可能没有设置它。【参考方案3】:
<script type="text/javascript">
      $(document).ready(function() 
                showWarning('@ViewBag.Message');
      );

</script>

您可以像这样在 javascript 中使用 ViewBag.PropertyName。

【讨论】:

我不确定 showWarning 的作用。 (没有为我做任何事情)但其余的确实包含正确的值。所以我在我的代码中看到了showWarning('2'); 我正在使用此代码,它只调用警报并且工作正常。你可以改变 alert('@ViewBag.Message');它会起作用的。【参考方案4】:

ViewBag服务器端代码。Javascript客户端代码。

你不能真的连接它们。

你可以这样做:

var x = $('#' + '@(ViewBag.CC)').val();

但它会在服务器上被解析,所以你并没有真正连接它们。

【讨论】:

我想你有一个额外的括号?我试过与此类似,但使用" @Doomsknight。 '" 是一回事。好用吗? 在运行时我看到var c = $('#' + '2').val(); @Doomsknight。好的。 所以它正在工作...... :) 你在 ViewBag.CC 中有 2 现在看到 2,我回到 var c = '@ViewBag.CC'; 似乎现在可以工作了:/ 也许一起运行一些方法会破坏这一切。谢谢【参考方案5】:

您可以通过这样做来实现解决方案:

JavaScript:

var myValue = document.getElementById("@(ViewBag.CC)").value;

或者如果你想使用jQuery,那么:

jQuery

var myValue = $('#' + '@(ViewBag.CC)').val();

【讨论】:

我猜 javascript 替代方案可能会帮助其他人 +1。我也认为你可以写'#@(ViewBag.CC)' 是的,你可能是对的@Doomsknight,因为世界包含多种解决方案:-) 是的@Doomsknight,你是对的。我只是尝试详细说明是一种简单的方法。 ;-)【参考方案6】:

现有的解决方案都不适合我。这是我发现确实有效的另一个解决方案:

控制器:

TempData["SuccessMessage"] = "your message here";

查看:

let msg = '@TempData["SuccessMessage"]';

【讨论】:

以上是关于如何从 JS 访问 ViewBag的主要内容,如果未能解决你的问题,请参考以下文章

您如何从单独的命令模块访问主要的 Discord“.js”

如何从方法 JS 访问类变量

如何从 Marionette.js ItemView 模板访问 Backbone.Model 方法?

如何从 Node.js 访问、检索、存储和删除文件到远程文件服务器?

如何从 background.js 访问变量以在 chrome 扩展中弹出

如何从方法访问 Vue.js 组件数据? [复制]