Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework VS 2010 Web应用程序中的ASP.NET Web Api CRUD操作_Entity Framework_Jquery_Asp.net Web Api_Crud - Fatal编程技术网

Entity framework VS 2010 Web应用程序中的ASP.NET Web Api CRUD操作

Entity framework VS 2010 Web应用程序中的ASP.NET Web Api CRUD操作,entity-framework,jquery,asp.net-web-api,crud,Entity Framework,Jquery,Asp.net Web Api,Crud,我试图在VS 2010 Web应用程序中执行ASP.NET Web Api CRUD操作,但为什么结果不返回源表中的所有整行 这是我的代码: 路线/Globax.asax protected void Application_Start(object sender, EventArgs e) { RouteTable.Routes.MapHttpRoute( name: "DefaultApi", r

我试图在VS 2010 Web应用程序中执行ASP.NET Web Api CRUD操作,但为什么结果不返回源表中的所有整行

这是我的代码:

路线/Globax.asax

protected void Application_Start(object sender, EventArgs e)
        {
            RouteTable.Routes.MapHttpRoute(
            name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}", // browse with localhost:7031/api/product
                //routeTemplate: "{controller}/{id}",  // browse with localhost:7031/product
                 defaults: new { id = System.Web.Http.RouteParameter.Optional }
      );
控制器/ProductController.cs:

    public class ProductController : ApiController
    {
        NorthwindEntities db = new NorthwindEntities();

        public List<Product> GetAll()
        {
            return db.Products.ToList<Product>();// ;
        }
View/ViewProduct.aspx:

    <script src="Script/jquery-1.7.1.min.js" type="text/javascript"></script>

<script type="text/javascript">
    $(function () {
        $('#<%= cviewproduct.ClientID %>').click(function (e) {
            getProducts();
            e.preventDefault();
        });

    });

    function getProducts() {
        $.getJSON("/api/product",
                function (data) {
                    $.each(data, function (key, val) {
                        //var str = val.ProductName;
                        // alert(str);

                        var row = '<tr> <td>' + val.ProductName + '</td><td>' + val.ProductID + '</td><tr/>';

                        $(row).appendTo($('#tblproduct'));


                    });
                });
    }
</script>
以下是产品控制器通过以下方式得出的结果:

下面是getProducts功能的结果:

请帮帮我

有什么想法或建议吗?

当您执行$.getJSON/api/product时,…,您不会得到发布时的XML。你回来了

作为第一步,我建议您下载并安装。打开它,并使用Composer选项卡执行GET forhttp://localhost:7031/api/product. 这将显示返回的JSON,它将不同于XML。将JSON发布到您的原始问题中,我们应该能够进一步提供帮助

我猜JSON的格式不正确。您的WebApiConfig.cs类是什么样子的

更新

是的,有更好的办法。首先,创建一个ApiModel ApiModel对于WebAPI就像ViewModel对于MVC一样:

public class ProductApiModel
{
    public int ProductId { get; set; }
    public string ProductName { get; set; }
}
现在,从您的控制器返回此项而不是实体:

public class ProductController : ApiController
{
    public IEnumerable<ProductApiModel> GetAll()
    {
        var products = db.Products
            .OrderBy(x => x.ProductID)
            .Select(x => new ProductApiModel
            {
                ProductId = x.ProductID,
                ProductName = x.ProductName
            });
        return products;
    }
}
如果使用,可以将控制器代码缩短一点:

public class ProductController : ApiController
{
    public IEnumerable<ProductApiModel> GetAll()
    {
        var entities = db.Products.OrderBy(x => x.ProductID);
        var models = Mapper.Map<ProductApiModel[]>(entities);
        return models;
    }
}

在做了一些研究之后,我最终发现,如果我错了,请纠正我: JavaScriptSerializer未能从关系序列化整个对象树 实体和其他实体之间的产品和类别

所以。。我做了​​对我的代码进行了一些更改,结果与预期一致

控制器/ProductController.cs:

    public class ProductController : ApiController
    {
        NorthwindEntities db = new NorthwindEntities();

        public List<Product> GetAll()
        {
            return db.Products.ToList<Product>();// ;
        }
发件人:

View/ViewProduct.aspx:

    <script src="Script/jquery-1.7.1.min.js" type="text/javascript"></script>

<script type="text/javascript">
    $(function () {
        $('#<%= cviewproduct.ClientID %>').click(function (e) {
            getProducts();
            e.preventDefault();
        });

    });

    function getProducts() {
        $.getJSON("/api/product",
                function (data) {
                    $.each(data, function (key, val) {
                        //var str = val.ProductName;
                        // alert(str);

                        var row = '<tr> <td>' + val.ProductName + '</td><td>' + val.ProductID + '</td><tr/>';

                        $(row).appendTo($('#tblproduct'));


                    });
                });
    }
</script>
发件人:

致:

或者。。。还有比这更好的方法吗

如果我仍然要传递实体对象而不是字符串对象 列出所有。。。取而代之的是GetAll字符串

问候,


安德里安。。这是我最后的工作代码

型号:

名称空间mylab1.Models

{
    public class ProductApi
    {
        [Key]
        public Int32 ProductID { get; set; }
        public string ProductName { get; set; }
    }
}
控制器/ProductController.cs:

    public class ProductController : ApiController
    {
        NorthwindEntities db = new NorthwindEntities();

        public List<Product> GetAll()
        {
            return db.Products.ToList<Product>();// ;
        }

View/ViewProduct.aspx:

    <script src="Script/jquery-1.7.1.min.js" type="text/javascript"></script>

<script type="text/javascript">
    $(function () {
        $('#<%= cviewproduct.ClientID %>').click(function (e) {
            getProducts();
            e.preventDefault();
        });

    });

    function getProducts() {
        $.getJSON("/api/product",
                function (data) {
                    $.each(data, function (key, val) {
                        //var str = val.ProductName;
                        // alert(str);

                        var row = '<tr> <td>' + val.ProductName + '</td><td>' + val.ProductID + '</td><tr/>';

                        $(row).appendTo($('#tblproduct'));


                    });
                });
    }
</script>
希望这对其他人有帮助

问候,


Andrian

你能给我们看一下服务返回的完整JSON对象吗谢谢你的重播,你能帮助我如何生成返回的JSON对象吗?试着在浏览器Firefox Firebug或Chrome开发者工具的开发者工具选项卡中查看响应我遵循了你的建议,但chrome控制台开发工具上没有任何错误或响应。感谢您的回复。。我将尝试使用Fiddler2,根据您的建议,我的项目不包含任何WebApiConfig.cs文件,但是我的路由表define on global.asax见上文,可以为我提供有关该配置的良好链接/参考。嗨..danludwig感谢您的建议。。汽车制造商。。解决了我的问题。简言之,是的,有更好的方法。WebApi内置了javascript序列化,因此不需要使用JsonConvert。但是,您不希望直接从控制器返回实体。返回与MVC中的ViewModels类似的ApiModels。您可以使用AutoMapper使这更容易,但您不必这样做。有关更多信息,请参阅我的更新答案:
public IEnumerable<ProductApi> getall()
    {
        Mapper.CreateMap<Product, ProductApi>();
        var entities = db.Products.OrderBy(x => x.ProductID).ToList();
        var models = Mapper.Map<ProductApi[]>(entities);
        return models;
    }
public List<ProductApi> GetAll()
{
    var products = db.Products
        .OrderBy(x => x.ProductID)
        .Select(x => new ProductApi
        {
            ProductID = x.ProductID,
            ProductName = x.ProductName
        }).ToList();
    return products;
}
function getProducts() {
    $.getJSON("/api/product",
            function (data) {
                $.each(data, function (key, val) {
                    var row = '<tr> <td>' + val.ProductName + '</td><td>' + val.ProductID + '</td><tr/>';
                    $(row).appendTo($('#tblproduct'));
                });
            });
   }