私は他の解決策を見てきましたが、私のケースには当てはまらないと思います。
問題は、すべてがうまく機能し、コードを通過することです。そして、デバッグすると、すべての値とすべてが正しく返されます。しかし、ネットワークを見ると、「\"WebGrid\" ヘルパーで Ajax サポートを有効にするには、jQuery スクリプト参照が必要です」という例外が返されます。
アイデアは、ドロップダウン メニューから選択が行われると、webGrid が含まれる部分ビューを更新しようとしているということです。
だからコントローラ:
[HttpGet]
public ActionResult FilterGrid(string selVal)
{
ItemType itemType = db.ItemTypes.FirstOrDefault(type => type.Name == selVal);
IEnumerable<Item> items = db.Items.ToList().Where(types => types.ItemTypeId.ToString() == itemType.Id.ToString());
return PartialView("_Grid", items.ToList());
}
私はグリッドを部分的に持っています:
<div id="grid">
@Html.Partial("_Grid", items)
</div>
そしてグリッド自体:
@using ManagerApp.Models
@model IEnumerable<Item>
@{
var grid = new WebGrid(Model.ToList(), rowsPerPage: 5, ajaxUpdateContainerId:"grid");
}
@grid.GetHtml(columns: grid.Columns(
grid.Column(columnName: "Name", header: "Name", format: (item) => @Ajax.ActionLink((string)item.Name, "ItemDetails", new { id = item.Id }, new AjaxOptions() { HttpMethod = "POST", UpdateTargetId="viewData", InsertionMode = InsertionMode.Replace }), style: "gridStyle"),
grid.Column(columnName: "Price", header: "Price"),
grid.Column("", format: (item) => @Ajax.ActionLink("Edit", "EditItem", new { id = item.Id }, new AjaxOptions() { HttpMethod = "POST", InsertionMode = InsertionMode.Replace, UpdateTargetId = "viewData" })),
grid.Column("", format: @<text>@Html.ActionLink("Delete", "DeleteItem", "ItemType", new { id = item.Id }, null)</text>)
))
そして ajax スクリプト:
/// <reference path="jquery-1.5.1.js" />
$(function () {
$("#GridItemTypes").change(function (event) {
$.ajax({
type: 'GET',
url: "ItemType/FilterGrid",
data: { selVal: $(this).find("option:selected").html() }
});
}
);
});
したがって、選択時にすべてのフィルタリングを通過し、部分ビューに入り、正しい値を持つように見えますが、レンダリングされません。
ここで何が欠けていますか?
ページの一番下に参照を配置すると、ページの他の何かが壊れただけで、これはまだ機能していないため、ページの一番上に参照があります。
また、Post を実行しようとしているのか、Get を実行しようとしているのかは問題ではありません。