jquery统计返回的行数
在我的MVC视图页面中有以下jquery统计返回的行数,jquery,asp.net-mvc,Jquery,Asp.net Mvc,在我的MVC视图页面中有以下Jquery $(function () { $('#SelectedProductId').change(function () { var selectedProduct = $('#SelectedProductId option:selected').val(); if (selectedProduct == null || selectedProduct == -1) { return false; }
Jquery
$(function () {
$('#SelectedProductId').change(function () {
var selectedProduct = $('#SelectedProductId option:selected').val();
if (selectedProduct == null || selectedProduct == -1) {
return false;
}
$('#pleaseWaitMessage').dialog("open");
$.ajax({
type: "POST",
url: "MyProducts.aspx/GetProducts",
data: { ProdId: selectedProduct },
timeout: 8000,
success: function (data) {
var content = $(data);
$('#productParameters').html(content);
$('#pleaseWaitMessage').dialog("close");
},
error: function () {
$('#pleaseWaitMessage').dialog("close");
$('#systemError').dialog("open");
}
});
});
$(function () {
$('#SelectedProductId').change(function () {
var selectedProduct = $('#SelectedProductId option:selected').val();
if (selectedProduct == null || selectedProduct == -1) {
return false;
}
$('#pleaseWaitMessage').dialog("open");
$.ajax({
type: "POST",
url: "MyProducts.aspx/GetProducts",
data: { ProdId: selectedProduct },
timeout: 8000,
success: function (data) {
var content = $(data);
$('#productParameters').html(content);
$('#pleaseWaitMessage').dialog("close");
},
error: function () {
$('#pleaseWaitMessage').dialog("close");
$('#systemError').dialog("open");
}
});
});
}))
这非常好,它返回产品列表,并根据从下拉列表中选择的选项在页面上显示它们
我想尝试并做的是将其稍微扩展一点,以便success
它还将检查已返回的项目数,这样我可以尝试启用/禁用选项。因此,如果它返回0,我将从页面禁用Buy按钮,如果它大于0,则应启用它
我尝试过使用content.count>0
,但当我第一次将计数输入警报时,它会显示34,而我真正期望的是1(只有1行)
在上面的jquery
中,有没有简单的方法来检查返回了多少行,然后执行另一个操作
编辑:
数据是通过调用my Controller->data Access Layer class->SQL获得的,没有web服务
编辑2:
根据@Roberto Linares的建议,我的完整脚本使用文档就绪功能如下所示
}))
我的查看页面包含
<div>
<div id="tableHolder">
<table id="productList">
<thead>
<tr>
<th>product</th>
<th>Date From</th>
<th>Date To</th>
<th> </th>
</tr>
</thead>
<tbody id="productParameters"></tbody>
</table>
</div>
</div>
产品
从
日期
为什么不返回内容和成功计数
例如,返回具有原始内容和内容计数(int)的对象
然后在你的js里
var count= data.ContentCount ;
var content = $(data.OriginalContent);
$('#productParameters').html(content);
最好的方法是在Ajax响应中将行数作为一个额外值返回,但由于您只是返回原始HTML而不是json或任何其他结构数据,因此您可以在执行$('#productParameters').HTML(content)之后计算插入的HTML元素数代码>
假设在
中插入
元素列表,则可以在插入元素后使用类似$(“#productParmeters>table>tbody>tr”)的方法对其进行计数。长度我将以稍微不同的方式解决此问题-
让我们看一个产品模型-
public class Product
{
public string Name { get; set; }
public int Quantity { get; set; }
}
还有一个控制器操作,它将返回产品列表作为Json结果-
[HttpGet]
public ActionResult GetProducts()
{
List<Product> products = new List<Product>();
products.Add(new Product() { Name = "Toyota", Quantity = 10 });
products.Add(new Product() { Name = "Merc", Quantity = 20 });
products.Add(new Product() { Name = "BMW", Quantity = 30 });
return new JsonResult() { Data = products, JsonRequestBehavior = JsonRequestBehavior.AllowGet };
}
JQuery函数不是-
<script>
$(function () {
$('#click').click(function (e) {
jQuery.ajax({
type: "GET",
url: "@Url.Action("GetProducts")",
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (data) {
$("#count").html(data.length);
$("#productsTmpl").tmpl(data).appendTo("#tblProducts");
},
failure: function (errMsg) {
alert(errMsg);
}
});
});
});
</script>
$(函数(){
$('click')。单击(函数(e){
jQuery.ajax({
键入:“获取”,
url:“@url.Action”(“GetProducts”)”,
数据类型:“json”,
contentType:“应用程序/json;字符集=utf-8”,
成功:功能(数据){
$(“#count”).html(data.length);
$(“#productsTmpl”).tmpl(数据).appendTo(“#tblProducts”);
},
失败:函数(errMsg){
警报(errMsg);
}
});
});
});
当我们点击按钮时,输出是-
<script>
$(function () {
$('#click').click(function (e) {
jQuery.ajax({
type: "GET",
url: "@Url.Action("GetProducts")",
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (data) {
$("#count").html(data.length);
$("#productsTmpl").tmpl(data).appendTo("#tblProducts");
},
failure: function (errMsg) {
alert(errMsg);
}
});
});
});
</script>
为什么不从服务器发送响应中的行数?看起来您当前只是返回HTML?将count和新HTML内容作为属性的JSON对象是一种方法。或者,您可以在更新内容后计算#productParameters
中的行数(它们是实际的
元素吗?)。如果您向我们展示一个数据
的示例(即服务器代码作为响应主体发送的内容),这将有很大帮助。我更喜欢计算tr的想法,因为这看起来很简单。在我列出的jquery中,哪里是放置代码的最佳位置?我在$('#productParameters').html(content)之后尝试过;但是它返回了0(我只能收集这是因为它在页面完成渲染之前计数)。@MattR如果页面还没有完成渲染,那么代码应该放在$(document).ready(function(){})中代码>。还要检查遍历查询是否正确。我只是猜测您从Ajax调用返回的HTML。我已经尝试过了,但它仍然返回0。我已经将代码添加到原始帖子中,以防你发现我的错误。它不会让我进一步编辑上面的评论。它似乎仍然在调用SQL之前显示警报,我想这可以解释0的结果,所以(document.reader)似乎无法工作。正如我所说,我已经将代码放在了主帖子的底部。@MattR在您发布的新代码中,我看到productParameters
是
元素的id,而不是
元素,因此警报中的遍历查询是错误的。它应该是alert($('#productParameters>tr').count)代码>
<script>
$(function () {
$('#click').click(function (e) {
jQuery.ajax({
type: "GET",
url: "@Url.Action("GetProducts")",
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (data) {
$("#count").html(data.length);
$("#productsTmpl").tmpl(data).appendTo("#tblProducts");
},
failure: function (errMsg) {
alert(errMsg);
}
});
});
});
</script>