【问题标题】:How to get to Model or Viewbag Variables in a Script Tag如何在脚本标签中访问模型或 Viewbag 变量
【发布时间】:2013-09-23 05:48:00
【问题描述】:

Vs'12 asp.net C# MVC4 - Int.Appl.Template EF 代码优先

这是我很简单的Script

<script class="TractsScript">

     $('#Add').click(function (e) {

         var val = @ViewBag.ForSection;
         alert(val);

     });
</script>

例如,我想简单地在我的script 中设置一个变量或使用Viewbag.Model.

我无法在以下任何论坛中找到答案:StckTrace1,StackTraceBetterAnswer

我尝试过的其他事情:

var model = @Html.Raw(Json.Encode(Model))
alert(model.Sections);
alert(@ViewBag.ForSection);

【问题讨论】:

  • 如果你的模型中没有任何循环引用,你可以试试var val = @new JavaScriptSerializer().Serialize(Model)
  • 这个脚本是否在视图中?
  • @Fals 对不起,我对这一切还是陌生的,如果您认为脚本与视图在同一个文档中,那么是的。

标签: jquery asp.net-mvc asp.net-mvc-4 razor


【解决方案1】:

使用单引号('):

var val = '@ViewBag.ForSection';
alert(val);

【讨论】:

    【解决方案2】:

    试试这个方法

    <script type="text/javascript">
    
        function set(value) {
            return value;
        }
    
        alert(set(@Html.Raw(Json.Encode(Model.Message)))); // Message set from controller
        alert(set(@Html.Raw(Json.Encode(ViewBag.UrMessage))));
    
    </script>
    

    谢谢

    【讨论】:

      【解决方案3】:

      你所拥有的应该可以工作。这取决于您设置的数据类型,即如果它是一个字符串值,您需要确保它在引号中,例如

      var val = '@ViewBag.ForSection';
      

      如果它是一个整数,您需要将其解析为一个,即

      var val = parseInt(@ViewBag.ForSection);
      

      【讨论】:

      • 如果我运行var attTwo = '@ViewBag.ForSection';,然后运行alert(attTwo);,我会收到一个带有“”(Null)值的警报。
      • 就像我说的“这取决于您设置的数据类型” - ForSection 是什么类型的数据?
      • 它在我的控制器中设置,我的Viewbag. 应该是Integer 类型。但是,我的 Model.Sections 被解析为字符串。
      • 对不起,人仍然无法工作错误:CS0103: The name 'Viewbag' does not exist in the current context 使用 var vals = parseInt('@Viewbag.ForSection'); 时,如果我在没有 @ 的情况下编写相同的代码,我会得到结果 NaN
      • 我发现詹姆斯的回答是正确的。我的视图包中有一个整数 id。 var mystrid='@ViewBag.id',var myintid=@ViewBag.id。 mystrid 没有值,myintid 有 id 的整数值。
      【解决方案4】:

      您可以这样做,提供 Json 或任何其他变量:

      1) 例如,在控制器中,您可以使用Json.NETJson 提供给ViewBag

      ViewBag.Number = 10;
      ViewBag.FooObj = JsonConvert.SerializeObject(new Foo { Text = "Im a foo." });
      

      2)在View中,将这样的脚本放在页面底部。

      <script type="text/javascript">
          var number = parseInt(@ViewBag.Number); //Accessing the number from the ViewBag
          alert("Number is: " + number);
          var model = @Html.Raw(@ViewBag.FooObj); //Accessing the Json Object from ViewBag
          alert("Text is: " + model.Text);
      </script> 
      

      【讨论】:

      • 但是当我尝试访问 @ViewBag.Number 时,它显示的是空白值..
      • @HrishikeshTT 你确定你在同一个控制器上下文中吗? Viewbag 只存在于控制器和被调用视图的相同上下文中。
      • 是的,我确信脚本调用在同一个控制器上下文中。另一个疑问是,我们可以以同样的方式访问 ViewData 吗?
      【解决方案5】:

      当你这样做时

      var model = @Html.Raw(Json.Encode(Model));
      

      您可能得到的是 JSON 字符串,而不是 JavaScript 对象。

      你需要把它解析成一个对象:

      var model = JSON.parse(model); //or $.parseJSON() since if jQuery is included
      console.log(model.Sections);
      

      【讨论】:

        猜你喜欢
        • 2019-01-20
        • 2021-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-04
        • 1970-01-01
        • 2013-06-19
        相关资源
        最近更新 更多