[HttpGet]
public JsonResult EfficientPaging(int? page = null, string searchParam = null)
{
int skip = page.HasValue ? page.Value - 1 : 0;
_users = db.Users.Select(u => u).ToList();
var data = _users.Skip(skip * 10).Take(10).ToList();
var empty = _users.Any();
var count = Convert.ToInt32(Math.Ceiling(_users.Count() / 10.0));
if (!string.IsNullOrEmpty(searchParam))
{
empty = !_users.Any(u => u.last_name.ToLower().Contains(searchParam.ToLower()));
count = _users.Count(u => u.last_name.ToLower().Contains(searchParam.ToLower()));
data =
_users.Where(u => u.last_name.ToLower().Contains(searchParam.ToLower()))
.Skip(skip * 10)
.Take(10)
.ToList();
}
var grid = new WebGrid(data);
var htmlString = grid.GetHtml(tableStyle: "webGrid",
headerStyle: "header",
alternatingRowStyle: "alt",
htmlAttributes: new {id = "DataTable"},
columns: grid.Columns(
grid.Column("first_name", "First"),
grid.Column("last_name", "Last"),
grid.Column("username", "Username"),
grid.Column("password_expiration", "Expired"),
grid.Column("locked", "Locked"),
grid.Column(format: (item) => Html.Actionlink("Edit", "Edit", "User", new { userId = item.id }, null))));
return Json(new
{
Data = htmlString.ToHtmlString(),
Count = count,
Empty = empty
}, JsonRequestBehavior.AllowGet);
}
JQuery的:
$(document).ready(function () {
$('input').keyup(function () {
var name = $(this).attr("name");
var searchParameter = $(this).val();
var element = $(this);
$.ajax({
type: "GET",
url: "User/EfficientPaging",
data: { searchParam: searchParameter },
dataType: "json",
success: function (d) {
element.parent().parent().find(".file").empty();
if (d.Empty) {
element.parent().parent().find(".file").append("<span style='color: black' >No files in this folder.</span>");
element.parent().parent().find(".pagination").empty();
element.parent().parent().find(".pagination").hide();
} else {
// add the dynamic WebGrid to the body
element.parent().parent().find(".file").append(d.Data);
element.parent().parent().find(".pagination").empty();
element.parent().parent().find(".pagination").show();
element.parent().parent().find(".pagination").append(paging(1, d.Count, 5));
pagingEvent();
}
}
});
//$("#uploadFile").show();
//$("#uploadButton").show();
return false;
});
});
我正在尝试创建一个异步搜索框,除编辑链接外,它的工作正常。 Html.Actionlink抛出错误,“当前上下文中不存在名称'Html'。”
VS建议使用System.Web.Mvc.Html添加,但System.Web.Mvc.Html.ActionLink不存在。
答案 0 :(得分:1)
你真的不应该在控制器中创建html。
说到那就试试
grid.Column(format: (item) =>
string.Format("<a href='{0}'>{1}</a>", Url.Action("Edit", "User", new { userId = item.id }), "Edit")
)))
与
相同grid.Column(format: (item) =>
{
var link = Url.Action("Edit", "User", new { userId = item.id });
return string.Format("<a href='{0}'>{1}</a>", link, "Edit")
})))
也与
相同grid.Column(format: (item) => GetLink(item.Id))))
/* later */
private string GetLink(int id){
return string.Format("<a href='{0}'>{1}</a>", Url.Action("Edit", "User", new { userId = id }), "Edit");
}
答案 1 :(得分:0)
我必须按以下格式添加ActionLink:
grid.Column(format: (item) => new HtmlString(string.Format("<a href='{0}'>{1}</a>", Url.Action("Edit", "User", new {userId = item.id}), "Edit"))
)));