将MVC2变量导入Jquery

时间:2011-11-14 18:27:43

标签: jquery asp.net asp.net-mvc-2 variables

我试图在Jquery中操作一个asp.net MVC2视图变量......

(function () {
    debugger;
    var $a = 10;
    var $b = '<%:toggle %>';
    var $c = 12;
});

正如您可能已经猜到的那样,我正在尝试操作我在Jquery的ASP.net MVC2视图中启动的切换变量。

我上面所做的似乎根本不起作用。我尝试加载的页面,每次尝试打开时都会爆炸。任何想法为什么会这样?注意......即使我摆脱''(撇号),我的页面仍然会爆炸。我还试图公开这个变量。这似乎也不起作用。

更新预期与我获取的内容 我不希望得到这个...

my page with that value set to the variable in the view that I described earlier

这是我所期待的 my page when I set the variable equal to 11 or something trivial

我很难收到发送到该页面的错误消息。我必须弄清楚它的生成位置并尝试从那里追逐它。我的同事为此特定页面设置了某种Javascript错误路由方案。我在破译正在发生的事情时遇到了一些麻烦。如果我知道错误,我可能会处于良好的状态。

更新2刚刚弄清楚错误

TemplateInfo.aspx(371):错误CS0103:当前上下文中不存在名称“toggle”...

我猜这个变量必须以某种方式公开或以某种方式放入范围。怎么能。据我所知,你不能用MVC2创建公共变量?你能吗?

1 个答案:

答案 0 :(得分:1)

您尝试使用的toggle变量似乎未在您的视图中定义。

在ASP.NET MVC控制器操作中,通常将视图模型传递给视图。这些视图模型包含视图将使用的属性。因此,在ASP.NET MVC应用程序中,您首先要定义视图模型:

public class MyViewModel
{
    public bool IsToggle { get; set; }
}

然后你编写一个控制器动作来实例化这个视图模型并将其传递给视图:

public ActionResult Index()
{
    var model = new MyViewModel
    {
        IsToggle = true
    };
    return View(model);
}

最后你为这个视图模型写了一个强类型视图,你可以在其中使用它的属性:

<%@ Page 
    Language="C#" 
    MasterPageFile="~/Views/Shared/Site.Master" 
    Inherits="System.Web.Mvc.ViewPage<AppName.Models.MyViewModel>" %>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <script type="text/javascript">
    (function () {
        debugger;
        var $a = 10;
        var $b = <%= Model.IsToggle %>;
        var $c = 12;
    });    
    </script>

</asp:Content>

现在让我们假设您的视图模型包含一些类型为字符串的属性,甚至包含其他复杂对象。在这种情况下,您需要正确编码它们。确保正确编码传递给javascript的值的最佳方法是使用javascript文字(JSON表示法):

<script type="text/javascript">
(function () {
    debugger;
    // we JSON serialize the entire model:
    var model = <%= new JavaScriptSerializer().Serialize(Model) %>;

    // Now you can manipulate individual model properties:
    alert(model.SomeProperty);
});    
</script>

请注意,JavaScriptSerializer类在System.Web.Extensions命名空间的System.Web.Script.Serialization程序集中定义,因此请务必将其纳入范围。