jquery统计返回的行数

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; }

在我的MVC视图页面中有以下
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>&nbsp;</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>