使用ajax ASP.NET从数据库获取信息

时间:2015-03-09 13:50:49

标签: jquery asp.net ajax asp.net-mvc

每当select字段更改时,我都会尝试从数据库中的表中获取一些信息。

我能够做出响应并且Ajax jQuery函数返回成功(函数)
问题是我不知道如何使用ASP.net MVC从我的数据库返回数据 我在成功的Ajax调用中获得的响应是​​以下文本:

ProduktWebKort.Models.WarehouseCustomer[]

这是我的控制器的一部分,其功能是通过Ajax调用

[HttpPost]
public string OnChange(int id)
{
    return db.Customers.Where(C => C.CustomerID == id).ToString();
}

我的Ajax调用如下所示:

<script type="text/javascript">
$(function () {
    // Document.ready -> link up remove event handler
    $("#CustomerID").change(function () {
        alert("Hej");
        var option = $('option:selected', this).val();
        $.ajax({
            type: "POST",
            url: '@Url.Action("Index/1", "Session")',
            contentType: "application/json; charset=utf-8",
            data: { id: 1 },
            dataType: "html",
            success: function (success) {
                alert('Success');
                console.log(success);
                for (var i = 0; i < success.length; i++) {
                    $(".form-horizontal").append("<li>" + success[i] + "      </li>");
                    console.log(success);
                }
            },
            error: function (e, text, string) {
                alert(e.message + text + string);
                console.log(e);
            }
        });
    });
});
</script>

我想从WarehouseCustomer返回我的选择字段中CustomerID个{{1}}的每个条目。

3 个答案:

答案 0 :(得分:1)

.NET中.ToString()方法的默认实现是返回对象的类型。因此,您得到的文本正是您正在处理的内容:WarehouseCustomer对象的数组:

  

ToString方法的默认实现返回Object类型的完全限定名称,如以下示例所示。

要从服务器获取数据,您应该以XML或JSON格式(首选变体)序列化数据对象,以便在客户端解析它们。

你可以做的很多,所以你应该选择你喜欢的方式。我建议你看看@ mason的回答,因为它看起来是解决问题的最好方法。

答案 1 :(得分:1)

在MVC 5项目中,您使用Web API来响应AJAX请求。 Web API检查请求内容的请求以及客户端支持的格式。然后它适当地序列化为JSON或XML或其他格式。它也紧跟MVC架构,并且在即将到来的MVC 6中已合并到MVC框架中。

通过NuGet在项目中安装Web API。启用attribute routing

[RoutePrefix("api/customers")]
public class CustomerController : ApiController
{
    [Route("byid/{id}")]
    public List<Customer> GetCustomers(int id)
    {
        return db.Customers.Where(C=>C.CustomerID==id).ToList();
    }
}

应返回客户端请求的数据格式的客户对象列表(默认为JSON)。

您请求的网址应该是对~/api/customers/byid/{id}的HTTP GET请求,例如:~/api/customers/byid/5。我经常使用MVC Helper @Url.Content()在客户端映射到Web API。

您的成功处理程序应该是这样的:

success: function (customers) {
            alert('Success');
            console.log(customers);
            for (var i = 0; i < customers.length; i++) {
                $(".form-horizontal").append("<li>" + customers[i].Name + "</li>");
                console.log(success);
            }
        },

答案 2 :(得分:0)

您在服务器端和客户端的问题。 如果您想在服务器端获得List客户,您应该像这样写Controller

[HttpPost]
public JsonResult OnChange(int id)
{
    return Json(db.Customers.Where(C => C.CustomerID == id).ToList());
}

在客户端,如果您想使用IEnumerable结果,则应更改这样的ajax代码:

     $.ajax({
        type: "POST",
        url: '@Url.Action("OnChange", "Session")',
        data: { id: 1 },
        dataType: "json",
        success: function (success) {
        alert('Success');
        console.log(success);
        $.each(success, function (i, item) {
           $(".form-horizontal").append("<li>" + item.CustomerID  + "</li>");                                              
           }); 
        },
        error: function (e, text, string) {
            alert(e.message + text + string);
            console.log(e);
        }
    });

我希望您的OnChange方法位于Session Controller。您可以按照您的理解访问列表元素的其他属性(item.CustomerID)。