3

更新中の div 要素内には、webgrid を使用した部分ページがあり、webgrid コンストラクターで ajaxUpdateContainerId: を指定すると、エラーが発生します。

JavaScript ランタイム エラー: 'jQuery' は定義されていません

エラーが参照する生成された JavaScript は次のとおりです。

<script type="text/javascript">
        (function($) {
            $.fn.swhgLoad = function(url, containerId, callback) {
                url = url + (url.indexOf('?') == -1 ? '?' : '&') + '__swhg=' + new Date().getTime();

                $('<div/>').load(url + ' ' + containerId, function(data, status, xhr) {
                    $(containerId).replaceWith($(this).html());
                    if (typeof(callback) === 'function') {
                        callback.apply(this, arguments);
                    }
                });
                return this;
            }

            $(function() {
                $('table[data-swhgajax="true"],span[data-swhgajax="true"]').each(function() {
                    var self = $(this);
                    var containerId = '#' + self.data('swhgcontainer');
                    var callback = getFunction(self.data('swhgcallback'));

                    $(containerId).parent().delegate(containerId + ' a[data-swhglnk="true"]', 'click', function() {
                        $(containerId).swhgLoad($(this).attr('href'), containerId, callback);
                        return false;
                    });
                })
            });

            function getFunction(code, argNames) {
                argNames = argNames || [];
                var fn = window, parts = (code || "").split(".");
                while (fn && parts.length) {
                    fn = fn[parts.shift()];
                }
                if (typeof (fn) === "function") {
                    return fn;
                }
                argNames.push(code);
                return Function.constructor.apply(null, argNames);
            }
        })(jQuery);

これが私のメインページです:

@model IEnumerable<PamperWeb.Models.Lab>

@{
    ViewBag.Title = "Index";
}

@Html.Partial("_SubMenu")

<h2>Index</h2>

<p>
    @Html.ActionLink("Add Lab", "Create", "Lab", new { patientId = ViewBag.PatientId }, null)
</p>
<div id="labs">
@Html.Partial("_Completed", Model)
</div> @section Scripts {
@Scripts.Render("~/bundles/jqueryval")
@Scripts.Render("~/bundles/sitespec")

}

そして部分:

@model IEnumerable<PamperWeb.Models.Lab>

@{
    var grid = new WebGrid(Model, ajaxUpdateContainerId: "labs", defaultSort: "Name");
}

@grid.GetHtml(columns: grid.Columns(
grid.Column("Name"),
grid.Column("Given", header: "Date"),
grid.Column("TimeGiven", header: "Time"),
grid.Column("Value"),
grid.Column("Phase"),
grid.Column("PatientId"),
grid.Column("", format: @<text>@Ajax.ActionLink("Disable", "Disable", new { labid = item.Id, patientid = ViewBag.PatientId }, new AjaxOptions { HttpMethod="POST", UpdateTargetId = "labs"})</text>)
)
)

webgrid コンストラクターから ajaxUpdateContainerId を削除すると、エラーはなくなります。しかし、クリックして並べ替えると、コントローラーのアクションを探している 404 が表示されます。ソート時にコントローラーのアクションを探すのはなぜですか?

2 番目の問題は、ajax を使用して部分的な変更を行うと、無効にすると、並べ替えが機能しなくなることです。html.actionlink に置き換えると、ソートは引き続き機能します。

私はjquery 1.9.1を持っています。何か案は?

4

3 に答える 3

4

WebGrid問題は、JavaScript インタープリターがwhichによって生成されたスクリプトを実行することjQueryです。ただしjQuery、その時点ではロードされていないため、「jQuery」は未定義のメッセージが表示されます。Sheep が提案したようにヘッダー ( @Scripts.Render) に jQuery スクリプトをロードすると、問題が解決するはずです。

ただし、Microsoft はデフォルトでページの下部に jQuery をロードしているため、これが本当に Microsoft によって意図されているかどうか疑問に思っています。これは通常、ページ表示の遅延を避けるために意味があります。

于 2013-12-11T11:51:24.493 に答える
1

これはもう解決しましたか?IEでも同じ問題がありましたが、修正できました。定義されたすべてのスクリプト/css (私のものは_Layout.cshtmlにありました) をバンドル ( BundleConfig.cs ) に移動する必要があり、それで問題が解決したようです。

   <head>
        <meta charset="utf-8" />
        <title>@ViewBag.Title - My ASP.NET MVC Application</title>
        <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />            
        @Styles.Render("~/Content/css")
        @Scripts.Render("~/bundles/modernizr")
        @Scripts.Render("~/bundles/jquery")
        @Scripts.Render("~/bundles/jqueryui")
    </head>
于 2013-04-25T20:20:04.720 に答える