我执行这样的函数,
<script type="text/javascript">
$(document).ready(function() {
getEntities("Clients/GetClients", 0, formatClientsResult);
var maxvalues = $("#HfId").val();
$(".pager").pagination(maxvalues, {
callback: getEntities("Clients/GetClients", formatClientsResult),
current_page: 0,
items_per_page: 5,
num_display_entries: 5,
next_text: 'Next',
prev_text: 'Prev',
num_edge_entries: 1
});
});
</script>
$(function() {
$.ajaxSetup({
contentType: 'application/json; charset=utf-8',
global: false,
async: false,
dataType: 'json',
beforeSend: function() { $('.loading').show(); },
complete: function() { $('.loading').hide(); }
});
});
function getEntities(url, currentPage, formatResultFunction) {
$.ajax({
url: url,
data: { 'currentPage': (currentPage + 1), 'pageSize': 5 },
success: function(data) {
if (data.isRedirect && data.isRedirect === true) {
alert('must redirect to ' + data.redirectUrl);
location = 'http://www.google.com';
}
else {
var divs = '';
$("#hfId").val('');
$("#ResultsDiv").empty();
$.each(data.Results, function() {
divs += formatResultFunction(this);
});
$("#ResultsDiv").append(divs);
$(".resultsdiv:even").addClass("resultseven");
$(".resultsdiv").hover(function() {
$(this).addClass("resultshover");
}, function() {
$(this).removeClass("resultshover");
});
$("#HfId").val("");
$("#HfId").val(data.Count);
}
}
});
return false;
}
function formatClientsResult(result) {
return '<div class="resultsdiv"><br /><span style="display: inline-block;width:220px;" class="resultName">' + result.ClientName + '</span><span class="resultfields" style="padding-left:10px;">Mobile No :</span> <span class="resultfieldvalues">' + result.ClientMobNo + '</span><span style="float:right; padding-right:2px;"><input type="checkbox" value=' + result.ClientId + ' onclick="storeIds();"/></span><br/><br/><span class="resultfields">Address :</span> <span class="resultfieldvalues">' + result.ClientAddress + '</span></div>';
}
我通过萤火虫检查我发现我的要求是,
http://localhost:1115/0?currentPage=[object+HTMLDivElement]1&pageSize=5
...我错过了什么......
在初始加载时执行请求是
http://localhost:1115/Clients/GetClients?currentPage=1&pageSize=5
这似乎有效,但只有回调函数失败......
我正在使用此jquery pagination plugin
正如达林所说,
$(document).ready(function() {
getEntities("Clients/GetClients", 0, formatClientsResult);
var maxvalues = $("#HfId").val();
$(".pager").pagination(maxvalues, {
callback: function() {
getEntities("Clients/GetClients", 0, formatClientsResult);
},
current_page: 0,
items_per_page: 5,
num_display_entries: 5,
next_text: 'Next',
prev_text: 'Prev',
num_edge_entries: 1
});
我的控制器动作,
public JsonResult GetClients(int currentPage, int pageSize)
{
if (Session["userId"]!=null)
{
var clients = clirep.FindAllClients(Convert.ToInt32(Session["userId"])).AsQueryable();
var count = clients.Count();
var results = new PagedList<ClientBO>(clients, currentPage - 1, pageSize);
var genericResult = new { Count = count, Results = results ,isRedirect=false};
return Json(genericResult);
}
else
{
var genericResult = new {redirectUrl = Url.Action("Create", "Registration"), isRedirect = true };
return Json(genericResult);
}
}
我的模特,
public IQueryable<ClientBO> FindAllClients(int userId)
{
var client = from c in taxidb.Clients
where c.CreatedBy == userId && c.IsDeleted == 0
select new ClientBO()
{
ClientId = c.ClientId,
ClientName= c.ClientName,
ClientMobNo= Convert.ToString(c.ClientMobNo),
ClientAddress= c.ClientAddress
};
return client;
}
和我的观点,
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<TaxiMVC.Models.Client>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Index
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>
Clients</h2>
<input type="hidden" id="hfId" />
<input type="hidden" id="hfEditId" />
<div id="ErrorDiv">
</div>
<div id="ImageButtonDiv">
<input type="button" class="addbuttons" onclick="return showadd();" />
<input type="button" class="editbuttons" onclick="if(editdetails()){return getClientbyId($('#hfId').val());}" />
<input type="button" class="deletebuttons" onclick="if(deletedetails()){return deleteClients($('#hfId').val());}" />
</div>
<div id="ResultsDiv">
</div>
<div id="PagerDown" class="pager">
</div>
<div id="adddiv" style="display: none;">
<form id="addform" autocomplete="off" action="">
<fieldset>
<legend>Client Details</legend>
<table cellpadding="0" cellspacing="0" width="100%">
<tr>
<td class="tdfields" style="width: 25%; padding-right: 20px;" align="right">
Client Name :
</td>
<td style="width: 20%;">
<%= Html.TextBox("Name", null, new { @class = "text_box_height_14_width_150" })%>
</td>
<td style="width: 55%;" class="status">
</td>
</tr>
<tr>
<td class="tdfields" style="width: 25%; padding-right: 20px;" align="right">
Mobile No :
</td>
<td style="width: 20%;">
<%= Html.TextBox("MobileNo", null, new { @class = "text_box_height_14_width_150" })%>
</td>
<td style="width: 55%;" class="status">
</td>
</tr>
<tr>
<td class="tdfields" style="width: 25%; padding-right: 20px;" align="right">
Address :
</td>
<td style="width: 20%;">
<%= Html.TextArea("Address", null, 6, 42, new { @class = "multiline_text_box_height_14_width_200" })%>
</td>
<td style="width: 55%;" class="status">
</td>
</tr>
<tr>
<td colspan="2" align="center">
<div class="form-submit">
<input type="submit" value="Submit" id="submit" />
<input type="button" value="Cancel" id="cancel" onclick="return showResultsdiv();" />
</div>
</td>
<td>
</td>
</tr>
</table>
</fieldset>
</form>
</div>
<input id="HfId" type="hidden" />
<script type="text/javascript">
$(document).ready(function() {
// getClients(0);
getEntities("Clients/GetClients", 0, formatClientsResult);
var maxvalues = $("#HfId").val();
$(".pager").pagination(maxvalues, {
callback: function() {
getEntities("Clients/GetClients", 0, formatClientsResult);
},
current_page: 0,
items_per_page: 5,
num_display_entries: 5,
next_text: 'Next',
prev_text: 'Prev',
num_edge_entries: 1
});
var validator = $("#addform").validate({
rules: {
Name: "required",
MobileNo: {
required: true,
number: true,
minlength: 10
},
Address: "required"
},
messages: {
Name: "please provide a client name",
MobileNo: {
required: "Please provide a mobile phone no",
number: "Please provide a mobile phone no",
rangelength: jQuery.format("Enter at least {0} characters")
},
Address: "please provide client address"
},
// the errorPlacement has to take the table layout into account
errorPlacement: function(error, element) {
error.appendTo(element.parent().next());
},
// set this class to error-labels to indicate valid fields
success: function(label) {
// set as text for IE
label.html(" ").addClass("checked");
},
submitHandler: function(form) {
if ($("#hfEditId").val() == "") {
$.ajax({
url: "Clients/ClientCreate",
data: { 'clientName': $("#Name").val(), 'clientMobNo': $("#MobileNo").val(), 'clientAddress': $("#Address").val() },
contentType: "application/json; charset=utf-8",
global: false,
async: false,
dataType: "json",
beforeSend: function() { $('.loading').show(); },
complete: function() { $('.loading').hide(); },
success: function(data) {
if (data.Result == "Success") {
$("#hfEditId").val('');
$("#addform").clearForm();
getEntities("Clients/GetClients", 0, formatClientsResult);
$("#adddiv").hide();
$("#ResultsDiv").show();
$("#PagerDown").show();
$("#ImageButtonDiv").show();
var maxvalues = $("#HfId").val();
$(".pager").pagination(maxvalues, {
callback: getEntities("Clients/ClientCreate", 0, formatClientsResult),
current_page: 0,
items_per_page: 5,
num_display_entries: 5,
next_text: 'Next',
prev_text: 'Prev',
num_edge_entries: 1
});
$("#alert").remove();
topBar('successfully added');
return false;
}
}
});
}
else {
$.ajax({
url: "Clients/Clientupdate",
data: { 'clientId': $("#hfEditId").val(), 'clientName': $("#Name").val(), 'clientMobNo': $("#MobileNo").val(), 'clientAddress': $("#Address").val() },
contentType: "application/json; charset=utf-8",
global: false,
async: false,
dataType: "json",
beforeSend: function() { $('.loading').show(); },
complete: function() { $('.loading').hide(); },
success: function(data) {
if (data.Result == "Success") {
$("#hfEditId").val('');
$("#addform").clearForm();
getEntities("Clients/GetClients", 0, formatClientsResult);
$("#adddiv").hide();
$("#ResultsDiv").show();
$("#PagerDown").show();
$("#ImageButtonDiv").show();
var maxvalues = $("#HfId").val();
$(".pager").pagination(maxvalues, {
callback: getEntities("Clients / Clientupdate", 0, formatClientsResult),
current_page: 0,
items_per_page: 5,
num_display_entries: 5,
next_text: 'Next',
prev_text: 'Prev',
num_edge_entries: 1
});
$("#alert").remove();
topBar('successfully updated');
return false;
}
}
});
}
}
});
});
</script>
</asp:Content>
答案 0 :(得分:3)
答案 1 :(得分:1)
getEntities
函数需要3个参数。在这里你只通过2:
callback: getEntities("Clients/GetClients", formatClientsResult)
第二个参数也需要是整数而不是另一个函数。因为它是一个回调,所以需要这样定义:
callback: function() {
getEntities("Clients/GetClients", 0, formatClientsResult);
}
更新:
您始终获得相同AJAX请求的原因是您始终将0传递给pagination callback中的getEntities
函数。
试试这个:
$(".pager").pagination(maxvalues, {
callback: function (new_page_index, pagination_container) {
// Notice how the new_page_index is passed
getEntities("home/GetClients", new_page_index, formatClientsResult);
},
current_page: 0,
items_per_page: 5,
num_display_entries: 5,
next_text: 'Next',
prev_text: 'Prev',
num_edge_entries: 1
});
答案 2 :(得分:0)
显然currentPage
的{{1}}参数是一个对象,因此向它添加1并不是一个明智的操作。用firebug检查getEntities()
的类型和内容是什么。
答案 3 :(得分:0)
试试这个:
$(document).ready(function() {
var helper = function() {
getEntities("Clients/GetClients", 0, formatClientsResult);
};
helper();
var maxvalues = $("#HfId").val();
$(".pager").pagination(maxvalues, {
callback: helper,
current_page: 0,
items_per_page: 5,
num_display_entries: 5,
next_text: 'Next',
prev_text: 'Prev',
num_edge_entries: 1
});