在MVC3视图中使用嵌入式javascript或单独的.js文件会更好吗?

时间:2012-04-05 22:29:03

标签: c# javascript asp.net-mvc-3

我被告知最好将Javascript代码放在一个单独的文件中以保持问题分离,虽然这个想法与我产生共鸣,但我觉得它并不实用。

这可能只是我缺乏经验,因此这个问题。

这是一个明确的示例,我发现将代码放在View中比将其放在单独的javascript文件中更好。

在我的视图中,我需要调用JQueryUI对话框,并使用我的模型名称动态设置标题。

$("#thumbs img").click(function () {
    var url = $(this).attr("src");
    $(".image-popup").attr("src", url);

    return $("#image-popup").dialog({
        modal: true,
        closeOnEscape: true,
        minHeight: 384,
        minWidth: 596,
        resizable: false,
        show: {
            effect: 'slide',
            duration: 500,
            direction: 'up'
        },
        hide: {
            effect: 'slide',
            duration: 250,
            direction: 'up'
        },
        title: '@Model.Product.Name'
    });
});

注意:

title: '@Model.Product.Name'

如果我在视图中使用Javascript,您可以看到访问到强类型模型。如果我使用单独的Javascript文件,情况就不是这样了。

我做错了吗,有什么我看不到的吗?

如果我要使用单独的文件,看起来如何看,因为我无法从Javascript文件中访问模型属性?

2 个答案:

答案 0 :(得分:12)

单独的js文件:

<div id="thumbs">
    <img data-dialog-title="@Model.Product.Name" src="[whatever url]" />
</div?

$("#thumbs img").click(function () {
    var title = $(this).data('dialog-title');
    var url = $(this).attr("src");
    $(".image-popup").attr("src", url);

    return $("#image-popup").dialog({
        modal: true,
        closeOnEscape: true,
        minHeight: 384,
        minWidth: 596,
        resizable: false,
        show: {
            effect: 'slide',
            duration: 500,
            direction: 'up'
        },
        hide: {
            effect: 'slide',
            duration: 250,
            direction: 'up'
        },
        title: title
    });
});

使用HTML5 data- *属性通过dom不显眼地访问模型属性。上面的javascript将作为外部文件完美地工作。

答案 1 :(得分:0)

如果你不能使用前面提到的HTML5数据属性,那么http://nuget.org/packages/RazorJS也许可以解决问题,看起来它可以解决你的问题。