当将模型属性作为参数传递给JavaScript函数时,Razor视图中出现语法错误。

12

我在以下代码中的每个逗号(,)和最后一个括号())都遇到了语法错误

<script type="text/javascript">
    Filters.priceRangeInit(@Model.Min, @Model.Max, @Model.From, @Model.To);
</script>

这个JavaScript函数在另一个文件中,看起来像这样:

Filters = {
    priceRangeInit: function (min, max, from, to) {
        $('#price-range-slider').slider({
            min: min,
            max: max,
            step: 50,
            values: [from, to],
            slide: function (event, ui) {
                $('#left-price-range-amount').val(ui.values[0]);
                $('#right-price-range-amount').val(ui.values[1]);
            }
        });
    }
};

模型长这样:

public class PriceRangeFilterModel
{
    public int Min { get; set; }
    public int Max { get; set; }
    public int From { get; set; }
    public int To { get; set; }
}

我使用的是Visual Studio 2012、ASP.NET MVC 3和Razor,网页浏览器上一切都正常,但我想消除在IDE中获取到的4个语法错误。

如果我将参数作为字符串传递,我就不再收到错误信息了,但是这样我需要将每个参数强制转换为int才能使滑块正常工作:

<script type="text/javascript">
    Filters.priceRangeInit('@Model.Min', '@Model.Max', '@Model.From', '@Model.To');
</script>

你有没有其他想法,如何编写此调用以避免语法错误?


2
你的代码看起来很好,因为它在浏览器中运行,所以你不需要担心 VS 中的语法错误。Visual Studio 的智能感知 - 特别是在 Razor 中 - 不是完美的。所以只需忽略这些错误即可。 - nemesv
2个回答

14

Razor Intellisense在Visual Studio中出现了故障。您的代码完全有效,您应该忽略那些警告并希望Microsoft在未来版本中修复它。


1
为了避免语法错误,请按照以下方式将字符串值用引号括起来,或者将数字用parseInt()函数括起来:
var myInt = parseInt('@Model.MyInt');
var myStr = '@Model.MyString';

或者,以您的示例为例:

Filters.priceRangeInit(parseInt('@Model.Min'), parseInt('@Model.Max'), parseInt('@Model.From'), parseInt('@Model.To'));

往返转换很麻烦,但实际上不需要花费太多时间。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接