Gal*_*len 12 javascript razor asp.net-mvc-3
我有一个ac#foreach循环正在输出一些javascript来初始化我的剃刀视图上的一些进度条.
@foreach (var item3 in Model)
{
@:$("#campaignMeter-@item3.ID").wijprogressbar({ value: @((item3.TotalRedeemed / item3.TotalSold) * 100), fillDirection: "east" });
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是visual studio在foreach循环上报告"条件编译被关闭",并且值的小计算总是为0,尽管TotalRedeemed和TotalSold具有值.我正确使用@:运算符吗?谢谢你的帮助.
到目前为止,我已经尝试过这两个建议,这就是我现在所拥有的:
@foreach (var item3 in Model)
{
var percentage = (item3.TotalRedeemed / item3.TotalSold) * 100;
<text>$("#campaignMeter-@item3.ID").wijprogressbar({ value: @percentage, fillDirection: "east" });</text>
}
Run Code Online (Sandbox Code Playgroud)
百分比显示为0,但TotalRedeemed和TotalSold具有值,因为它们在调用之前打印在视图上.有没有办法在我的视图上设置一个断点,看看它打印前的百分比是多少?
J R*_*J R 31
Timmi4sa - 我同意,关于我们为什么会收到此错误的答案并不多.我终于更接近理解这一切,所以我想我会分享.
条件编译定义为我的MS如下:
条件编译使JScript能够使用新的语言功能,而不会牺牲与不支持这些功能的旧版本的兼容性.条件编译的一些典型用法包括在JScript中使用新功能,将调试支持嵌入到脚本中以及跟踪代码执行.
据我所知,我们真的在谈论VS的一个特性.我目前的猜测是:VS允许你调试JS,但它必须知道JS是为了调试它.默认情况下条件编译是关闭的 - 我猜测还有一些额外的开销.当我们在JS中使用@Model时我们正在做的事情就是完全按照警告的状态(或多或少)来创建条件JS.根据我们的C#/ VB变量的值,JS最终会变成不同的东西.
根据MS,解决方案是通过声明如上所述打开条件编译:
/*@cc_on @*/
Run Code Online (Sandbox Code Playgroud)
虽然我倾向于有点肛门并且更愿意避免警告,但这可能是我只是忽略的一个(除非有人可以进一步教育我为什么这是一个坏主意).
如果你真的希望错误消失并且不喜欢Conditional Compilation标志,你可以用下面的双引号包装C#/ VB代码调用.但是这感觉很脏并且只能工作,因为JS是松散类型的...(无论如何,数字类型,字符串应该没有问题......无论如何,这感觉很hacky)
"@Model.Items.Count()"
Run Code Online (Sandbox Code Playgroud)
编辑:我去做了一些研究......在浏览这篇文章之后,我更喜欢CC的想法:http://www.javascriptkit.com/javatutors/conditionalcompile.shtml.我想我会忽略这个警告.
我希望这有助于解释一些谜团.
编辑:
另一种选择是在表单上抛出一个HiddenFor,给它一个Id,然后从该字段填充一个JS变量(jQuery使这很容易).这就是我暂时做的事情.它消除了警告,我经常想要将JS变量与原始的VMC字段进行比较.对于那些需要它的人:
@* Somewhere in your form - assuming a strongly typed view *@
@Html.HiddenFor(x => x.YourField, new { id = "SomethingMeaningful" })
// and then in your JS
$(document).ready(function(){
...
var jsYourField = $("#SomethingMeaningful").val();
...
});
Run Code Online (Sandbox Code Playgroud)
请注意,JS变量和MVC变量并不总是"排列"完全正确,因此当您将变量值复制到JS中时,可能需要进行一些转换或其他工作.
添加/*@cc_on @*/您的代码.
更新:找出他们为什么会0:
item3.TotalRedeemed并且item3.TotalSold需要float或double.如果是的话int,它就会出现0.
| 归档时间: |
|
| 查看次数: |
29890 次 |
| 最近记录: |