更新中の 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を持っています。何か案は?