你如何在asp.net中使用ajax发布一个对象?

时间:2017-08-18 19:40:53

标签: c# jquery asp.net ajax

以下是产品类:

public class Product
{
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
    [Required]
    public string Description { get; set; }
    [Required]
    [Range(1, 1000000)]
    public decimal Price { get; set; }
    [Required]
    public string Category { get; set; }
}

这是我的.cshtml页面:

<div class="alert alert-success">
    <span id="responseMessage"></span>
</div>
<div class="form-group">
    <label>Name</label>
    @Html.TextBoxFor(x => x.Name)
</div>
<div class="form-group">
    <label>Price</label>
    @Html.TextBoxFor(x => x.Price)
</div>
<div class="form-group">
    <label>Category</label>
    @Html.TextBoxFor(x => x.Category)
</div>
<div class="form-group">
    <label>Description</label>
    @Html.TextBoxFor(x => x.Description)
</div>
<button id="postButton">Ok</button>

这是我的javascript:

$(document).ready(function () {
    $("#postButton").click(function () {
        var product = 'product=' +
            JSON.stringify({
                Name: $('#Name').val(),
                Description: $('#Description').val(),
                Price: $('#Price').val(),
                Category: $('#Category').val()
            });


        $.ajax({
            url: "/api/products/postproduct",
            type: "POST",
            data: product,
            dataType: 'json',
            success: function (data, status, xhr) {
                $('#responseMessage').html('Insert status: ' + 
                data.d.status);
            },
            error: function (xhr, status, error) {
                alert('Error occurred: ' + status);
            }
        });
    });
});

这是我的控制器:

    public async Task<IHttpActionResult> PostProduct(Product product)
    {
        if (ModelState.IsValid)
        {
            await Repository.SaveProductAsync(product);
            return Ok();
        }
        else
        {
            return BadRequest(ModelState);
        }
    }

提前谢谢你。 ajax帖子击中控制器(我在那里设置断点),但是当我将鼠标悬停在product参数上时,没有值进入。如果您需要更多信息,请告诉我。

2 个答案:

答案 0 :(得分:0)

我认为您的问题是:

您正在将数据传递给您的方法,但该参数尚未属于Product类型。您可能需要将参数类型更改为更通用的class Operand { private Token token; Token Token { get => token; set => token = (value.Equals(TokenType.IntegerLiteral) || value.Equals(TokenType.Identifier)) ? value : throw new Exception("Token must be IntegerLiteral or Identifier"); } } 类型。然后你可以把它投射到你想要的object模型。

一旦数据进入您的控制器,它需要一个强类型对象product。因此,将参数类型更改为product可以解析object的每个子项。

答案 1 :(得分:0)

将控制器中的参数名称更改为此     public async Task PostProduct(产品产品)

或改变jquery     数据:{“产品”,产品}

希望这会奏效。