我的Javascript代码不在我的MVC视图中运行

时间:2017-12-15 22:12:28

标签: javascript jquery asp.net-mvc

我在将此模板实现到我的MVC应用程序时遇到了一些问题。

https://bootsnipp.com/snippets/featured/pinterest-like-responsive-grid

我的CSS和代码工作正常,但Javascript无法正常工作。

我使用局部视图来包含如下所示的代码:

@model List<Assignment_3.Models.Word>

<script type="text/javascript" src='@Url.Content("~/Scripts/ResponsiveGrid.js")'></script>

<div class="container">
    <div class="row">
        <div>
            <section id="pinBoot">
                @foreach (var word in Model)
                {
                    <ItemTemplate>
                        <article class="white-panel">

                            <a href="@Url.Action("Detail", new { id = Word.WordId })">
                                <img src="@Url.Content(Idiom.Imagepath)" />
                            </a>
                            <h4 class="textwrapper">Test</h4>
                            <p>Language</p>
                        </article>
                    </ItemTemplate>
                }
            </section>
        </div>
    </div>
</div>

<style>
    body {
        background-color: #eee;
    }

    .textwrapper {
        word-break: break-all;
    }

    #pinBoot {
        position: relative;
        max-width: 100%;
        width: 100%;
    }

    img {
        max-width: 100%;
        height: auto;
    }

    .white-panel {
        position: absolute;
        background: white;
        box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.3);
        padding: 10px;
    }
    .white-panel h1 {
            font-size: 1em;
    }

    .white-panel h1 a {
            color: #A92733;
    }

    .white-panel:hover {
            box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.5);
            margin-top: -5px;
            -webkit-transition: all 0.3s ease-in-out;
            -moz-transition: all 0.3s ease-in-out;
            -o-transition: all 0.3s ease-in-out;
            transition: all 0.3s ease-in-out;
    }
</style>

这是Javascript文件:

$(document).ready(function () {
$('#pinBoot').pinterest_grid({
    no_columns: 4,
    padding_x: 10,
    padding_y: 10,
    margin_bottom: 50,
    single_column_breakpoint: 700
});
});

usage:

$(document).ready(function () {

$('#blog-landing').pinterest_grid({
    no_columns: 4
});
});

; (function ($, window, document, undefined) {
var pluginName = 'pinterest_grid',
    defaults = {
        padding_x: 10,
        padding_y: 10,
        no_columns: 3,
        margin_bottom: 50,
        single_column_breakpoint: 700
    },
    columns,
    $article,
    article_width;

function Plugin(element, options) {
    this.element = element;
    this.options = $.extend({}, defaults, options);
    this._defaults = defaults;
    this._name = pluginName;
    this.init();
}

Plugin.prototype.init = function () {
    var self = this,
        resize_finish;

    $(window).resize(function () {
        clearTimeout(resize_finish);
        resize_finish = setTimeout(function () {
            self.make_layout_change(self);
        }, 11);
    });

    self.make_layout_change(self);

    setTimeout(function () {
        $(window).resize();
    }, 500);
};

Plugin.prototype.calculate = function (single_column_mode) {
    var self = this,
        tallest = 0,
        row = 0,
        $container = $(this.element),
        container_width = $container.width();
    $article = $(this.element).children();

    if (single_column_mode === true) {
        article_width = $container.width() - self.options.padding_x;
    } else {
        article_width = ($container.width() - self.options.padding_x * 
self.options.no_columns) / self.options.no_columns;
    }

    $article.each(function () {
        $(this).css('width', article_width);
    });

    columns = self.options.no_columns;

    $article.each(function (index) {
        var current_column,
            left_out = 0,
            top = 0,
            $this = $(this),
            prevAll = $this.prevAll(),
            tallest = 0;

        if (single_column_mode === false) {
            current_column = (index % columns);
        } else {
            current_column = 0;
        }

        for (var t = 0; t < columns; t++) {
            $this.removeClass('c' + t);
        }

        if (index % columns === 0) {
            row++;
        }

        $this.addClass('c' + current_column);
        $this.addClass('r' + row);

        prevAll.each(function (index) {
            if ($(this).hasClass('c' + current_column)) {
                top += $(this).outerHeight() + self.options.padding_y;
            }
        });

        if (single_column_mode === true) {
            left_out = 0;
        } else {
            left_out = (index % columns) * (article_width + 
self.options.padding_x);
        }

        $this.css({
            'left': left_out,
            'top': top
        });
    });

    this.tallest($container);
    $(window).resize();
};

Plugin.prototype.tallest = function (_container) {
    var column_heights = [],
        largest = 0;

    for (var z = 0; z < columns; z++) {
        var temp_height = 0;
        _container.find('.c' + z).each(function () {
            temp_height += $(this).outerHeight();
        });
        column_heights[z] = temp_height;
    }

    largest = Math.max.apply(Math, column_heights);
    _container.css('height', largest + (this.options.padding_y + 
this.options.margin_bottom));
};

Plugin.prototype.make_layout_change = function (_self) {
    if ($(window).width() < _self.options.single_column_breakpoint) {
        _self.calculate(true);
    } else {
        _self.calculate(false);
    }
};

$.fn[pluginName] = function (options) {
    return this.each(function () {
        if (!$.data(this, 'plugin_' + pluginName)) {
            $.data(this, 'plugin_' + pluginName,
                new Plugin(this, options));
        }
    });
}

})(jQuery, window, document);

获取Javascript工作的任何提示都将非常感谢!

2 个答案:

答案 0 :(得分:0)

即使您使用的是jQuery和其他开源库,最好还是在关闭正文标记之前使用javascript文件。您是否检查了浏览器(Windows上的F12)以查看您指向的URL是否正在加载网络上的文件?在MVC中,您可能希望将JS文件放在bundle.config中并使用Bundling和Minification引用它们,如下所示

在Bundle.config中

public static void RegisterBundles(BundleCollection bundles)
    {
        bundles.Add(new ScriptBundle("~/bundles/scripts").Include(
                    "~/Scripts/script.js");

在Application_Start事件中

public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}
} 

在用户界面

 @Scripts.Render("~/bundles/scripts")

这样,您的JS文件就会缩小,并且更改总是会反映到UI上(解决缓存问题)

答案 1 :(得分:0)

如果您在浏览器中检查输出html,您会发现脚本标记中的网址可能无法正确解析:

user_id

您可以使用相对于域根目录的网址来解决此问题。

df