在MVC3中显示从JSON到表的数据

在MVC3中显示从JSON到表的数据,json,asp.net-mvc-3,Json,Asp.net Mvc 3,我在MVC3项目的.aspx视图中有一个表。 我在MVC3中使用.aspx视图,而不是Razor引擎或.cshtml视图。 我的jquery中有一个subwrited函数,它从控制器中获取一个JSON对象,其中包含一些值 function GetUsers() { $.ajax({ url: ('/Home/GetUsers'), type: 'POST', contentType: 'application/json',

我在MVC3项目的.aspx视图中有一个表。 我在MVC3中使用.aspx视图,而不是Razor引擎或.cshtml视图。 我的jquery中有一个subwrited函数,它从控制器中获取一个JSON对象,其中包含一些值

function GetUsers() {
    $.ajax({
        url: ('/Home/GetUsers'),
        type: 'POST',
        contentType: 'application/json',
        data: JSON.stringify(),

        success: function (result) {
            alert(result.length);
            var partnersTable = $('#PartnersTable');
            partnersTable.html();

        },
        error: function () { alert("error"); }
    });
}
现在我看到了一张桌子

<div id = "topGrid">
    <table id="PartnersTable" style="float: left; width: 49%">
        <th style="width: 75%">Partner</th>
        <th style="width:25%">Users</th>
    </table>

搭档
使用者
这就是我获取JSON对象的方式。现在它只是虚拟数据,但稍后将从数据库中填充

public JsonResult GetUsers()
        {
            var model = new List<UsersModel>();
            var item = new UsersModel();
            for (int i = 1; i <= 10; i++)
            {
                item.Partner = "Partner" + Convert.ToString(i);
                item.Count = i;
                model.Add(item);
            }
            return Json(model, JsonRequestBehavior.AllowGet);
        }
publicjsonresult GetUsers()
{
var模型=新列表();
var item=new UsersModel();

对于(inti=1;i我将考虑使用jQuery插件,类似于jqGrid(http://www.trirand.com/blog/)可以从JSON创建表


或者,您可以创建一个局部视图,并在控制器中呈现该视图,然后返回生成的HTML以在此页面上填充。允许表的强类型定义。

不确定返回JSON是否是您在此处的最佳选择。使用JSON,您将需要一些方法将JSON对象转换为可放置在有很多这样做的策略,包括模板化和通过代码构建元素

在这种情况下,最好让控制器方法从局部视图发回HTML而不是JSON

更改:-

   contentType: 'application/json'
var partnersTable = $('#PartnersTable');
partnersTable.html();
致:-

更改控制器方法以返回ActionResult而不是JsonResult

添加一个新的局部视图以呈现整个表

在标记中保留div#topGrid

更改:-

   contentType: 'application/json'
var partnersTable = $('#PartnersTable');
partnersTable.html();
致:-


<>不同的方法,但更适合你的要求,我觉得。

< P>有2种方法你可以考虑。

  • 让控制器操作直接返回包含表数据的部分视图,这样就不必进行javascript模板化
  • 使用JSON并进行javascript模板化
  • 让我们看看第一种方法:

    public ActionResult GetUsers()
    {
        var model = new List<UsersModel>();
        for (int i = 1; i <= 10; i++)
        {
            var item = new UsersModel();
            item.Partner = "Partner" + Convert.ToString(i);
            item.Count = i;
            model.Add(item);
        }
        return PartialView(model);
    }
    

    现在让我们来看看第二种方法,它包含了控制器动作返回JSON和手动创建表的HTML模板:

    public ActionResult GetUsers()
    {
        var model = new List<UsersModel>();
        for (int i = 1; i <= 10; i++)
        {
            var item = new UsersModel();
            item.Partner = "Partner" + Convert.ToString(i);
            item.Count = i;
            model.Add(item);
        }
        return Json(users, JsonRequestBehavior.AllowGet);
    }
    
    public ActionResult GetUsers()
    {
    var模型=新列表();
    
    对于(int i=1;如果不使用插件,我不知道有没有可能??您从控制器检索的JSON对象的格式是什么?我不确定是否可以使用它,因为我使用的不是Razor引擎,而是.aspxviews@Monga,将其转换为WebForms语法并不重要。我已经更新了我的答案,但你应该提到这一点在你的问题中,你使用的是WebForms视图引擎。此外,你可以做一些努力,而不只是等待别人为你编写代码。再说一次:正如我所说,我很新。这是我第一次在.aspx页面上使用MVC,而不是通常的.cshtml页面。@Monga,如果你是新手,那么我邀请你阅读关于ASP.NET MVC.O的教程n StackOverflow您应该只询问有关您在代码中遇到的问题的具体问题。您应该首先尝试自己解决问题,然后寻求帮助。@DarinDimitrov:非常感谢您及时提供的帮助。在第一种方法中,除了一件事之外,我什么都懂。您正在使用return PartialView(模型);我尝试用我的局部视图的名称替换PartialView,但它不起作用。事实上,控制器没有解析我的局部视图的名称
    <table id="PartnersTable" style="float: left; width: 49%" data-url="<%= Url.Action("GetUsers", "Home") %>">
        <thead>
            <tr>
                <th style="width: 75%">Partner</th>
                <th style="width:25%">Users</th>
            </tr>
        </thead>
        <tbody>
        </tbody>
    </table>
    
    var table = $('#PartnersTable');
    $.ajax({
        url: table.data('url'),
        type: 'GET',
        cache: false,
        context: table,
        success: function (result) {
            this.html(result);
        },
        error: function () { alert("error"); }
    });
    
    public ActionResult GetUsers()
    {
        var model = new List<UsersModel>();
        for (int i = 1; i <= 10; i++)
        {
            var item = new UsersModel();
            item.Partner = "Partner" + Convert.ToString(i);
            item.Count = i;
            model.Add(item);
        }
        return Json(users, JsonRequestBehavior.AllowGet);
    }
    
    var table = $('#PartnersTable');
    $.ajax({
        url: datble.data('url'),
        type: 'GET',
        cache: false,
        context: table,
        success: function (users) {
            var tableBody = this.find('tbody');
            tableBody.empty();
            $.each(users, function(index, user) {
                $('<tr/>', {
                    html: $('<td/>', {
                        html: user.Partner
                    }).after($('<td/>', {
                        html: user.Count
                    }))
                }).appendTo(tableBody);
            });
        },
        error: function () { alert("error"); }
    });