【问题标题】:How do I access ViewBag from JS如何从 JS 访问 ViewBag
【发布时间】: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();

【问题讨论】:

    标签: c# javascript asp.net asp.net-mvc-3 viewbag


    【解决方案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"]';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-19
      • 2022-01-22
      • 1970-01-01
      • 2023-03-21
      • 2013-09-11
      • 2013-12-30
      • 1970-01-01
      相关资源
      最近更新 更多