2011-03-03 55 views

回答

0

由于该变量实际上并不存在于浏览器中,所以您的JavaScript运行时必须使用某种AJAX类型的技术。

简单的旧ASMX Web服务可能是您最好的选择。

当然,如果你只是想要它的初始值,你可以在页面组合过程中将其设置为文字。

虽然我没有确切的格式化经验。

6

你可以试试下面的办法:

@{ 
    var array = new [] {"foo", "bar"}; 
} 

<script type="text/javascript"> 
    var array = [@Html.Raw(String.Join(",", array.Select(s => "'" + s + "'")))]; 

    alert(array[1]); 
</script> 

它系列化C#数组作为一个JavaScript一个格式为[“富”,“酒吧”。

+0

我正在开发Visual Studio 2010和MVC3 views.It的工作,但它强调@Html部分并说“条件编译已关闭” 。我使用foreach填充cshtml中的var数组,并且项目数可能会不时变化。所以当序列化有可能运行一个循环??我怎么做? – 2011-03-03 10:50:43

+0

@Html部分是HtmlHelper类型的一个属性,不应该是一个问题。我所显示的代码可以处理任意大小的数组。代码的作用是首先引用所有字符串,然后将它们加入,生成另一个字符串“foo”,“bar”,“baz”,该字符串在页面中输出。 – 2011-03-03 11:43:03

+0

如果我们有一个validationsummery作为@ Html.ValidationSummary(true,“”);在@ {}标签内,是否有可能将错误作为字符串从@ {}标签中的var变量中取出,然后从javascript中访问?我怎么做? – 2011-03-07 13:03:37

3

这是您可能想考虑使用JSON的最佳示例。假设你正在使用ASP.NET网页(而不是Web窗体/ MVC),在你的App_Code目录制定,创建一个名为Javascript.cshtml的辅助文件,用下面的代码:

@using System.Web.Script.Serialization; 

@helper ToJson(object obj) { 
    var ser = new JavaScriptSerializer(); 
    @Html.Raw(ser.Serialize(obj)) 
} 

现在,如果你的主页你可以像这样引用帮手:@Javascript.ToJson(myObj)。因此,在您的页面上,您可能会这样做:

@{ 
    var myCSharpObj = new { First = "1st", Second = "2nd" }; 
} 
<script language="javascript"> 
    var myJSObj = @Javascript.ToJson(myCSharpObj); 
    alert(myJSObj.Second); 
</script> 
+0

我只是做了几乎完全相同的事情,只是意识到已经有一个内置的帮手! '@ Json.Encode'。它不会将它转换为“raw”,所以我创建了另一个助手,就像你的,但在里面你可以放置'@ Html.Raw(Json.Encode(obj));'。 – mpen 2011-12-04 05:00:05