【问题标题】:Display list data using jQuery and Ajax使用 jQuery 和 Ajax 显示列表数据
【发布时间】:2015-09-22 23:43:41
【问题描述】:

我有以下结构:

  1. WebService - 从数据库中获取数据并返回列表 人
  2. ASP.NET MVC 应用程序 - 使用 1) 中的 Web 服务。

HomeControler 中有一个方法:

public JsonResult GetDbData()
{
    WebService1SoapClient client = new WebService1SoapClient();
    List<Person> lstPersons = client.GetPersons();

    return Json(lstPersons, JsonRequestBehavior.AllowGet);
}

我想以这种方式使用 jQuery Ajax 调用在 Index.cshtml 视图中显示人员列表:

<div>
    <div id="div3">Database data.</div>
</div>

<input id="btnGetDBData" type="button" value="GetDBData" />

$('#btnGetDBData').click(function () {
    $.ajax({
        url: "/Home/GetDbData",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            $("#div3").html(data);
        },
        error: function (xhr, status) {
            alert(status);
        }
    });
});

但是,它不起作用。

我是 jQuery 新手,需要某种表格或模板,或者类似可以显示列表或表格结构的中继器。

Person 类如下所示:

public class Person
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

我需要在 Html 表格中显示人员列表。

【问题讨论】:

  • 您正在返回一个数组,您应该尝试循环或使用数组索引访问它 => stackoverflow.com/questions/15848183/…
  • 制作部分视图,显示列表并从您的操作中返回。
  • 一切都应该在 JavaScript (jQuery) 中。

标签: asp.net-mvc jquery


【解决方案1】:

为什么你将div3 的内容设置为.html

success: function (data) {
    $("#div3").html('');
    var div3Content = '';
    for(var i = 0; i < data.length; i++)
    {
       div3Content += '<p>' + data[i].Name + '</p>'; // if Name is property of your Person object
    }
    $("#div3").append(div3Content);
},

这样,Person 的名称将作为&lt;p&gt; 标签添加到div3

【讨论】:

  • @FSou1:拼写错误,感谢指出 - 已更正
  • $("#div3").html(''); 每次迭代都会清除 div,只显示最后的数据
  • @Satpal:已更新。每次调用服务器后它会清除div3,然后根据结果更新内容
  • 我真的不需要 div。它可能是 Html 表格。
  • @tesicg:在这种情况下,您只需在 table - $("#div3").append('&lt;tr&gt;&lt;td&gt;'+data[i].Name+'&lt;/td&gt;&lt;/tr&gt;'); 中追加行,而不是 $("#div3").append('&lt;p&gt;'+data[i].Name+'&lt;/p&gt;');
【解决方案2】:

success 方法中的data 变量中,您有一个数据数组,您必须手动绘制它

success: function (data) {
    $.each(data, function (index, value) {
        $("#div3").append(value.Id + '|' + value.FirstName + '|' + value.LastName);
    });
}

【讨论】:

  • 我知道这一点,我寻求帮助。
  • 函数中有 data 数组,其中每个元素都是一个对象(不是吗?)所以你可以用 jQuery 来实现
  • 我们不知道您希望如何显示它以及您有哪些属性
  • 是的。请看原帖。有必要的详细信息。
  • 例如,你可以这样使用它,你必须决定你自己的输出格式
【解决方案3】:

$('#div3').html(data) 将 HTML 按字面意思设置为数据中的内容。但是,在您的 jQuery 调用之后,data 包含一个对象数组,而不是 HTML。您首先需要定义 HTML 的外观。 - 你想要它作为一个无序列表、一个表格、一组漂亮的瓷砖,...?

对于从数据呈现 HTML,我建议您还考虑模板和/或数据绑定库,例如,例如knockout 允许您在 HTML 中定义模板:

<ul data-bind="foreach: persons">
    <li data-bind="text: LastName"></li>
</ul>

还有你的 jQuery ajax 成功回调:

success: function (data) {
    ko.applyBindings({ persons: data });
}

上面的淘汰赛 foreach 绑定是您要求的一种中继器。

更新:如果你想要一张桌子,剔除模板只需更改为:

<table>
    <thead><tr><th>First Name</th><th>Last Name</th><th>Full Name</th></tr></thead>
    <tbody data-bind="foreach: persons">
        <tr>
            <td data-bind="text: FirstName"></td>
            <td data-bind="text: LastName"></td>
            <td data-bind="text: FirstName() + ' ' + LastName()"></td>
        </tr>
    </tbody>
</table>

【讨论】:

  • 是的。请看原帖。有必要的详细信息。
  • @tesicg:我已经更新了我的答案——你可以像中继器一样使用 foreach,也就是说,你可以用它做任何你喜欢的事情,它不需要是表格或列表。上面的片段仅作为示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-18
  • 2014-01-30
  • 2014-12-15
  • 2018-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多