繁体   English   中英

一些值为空 AJAX 调用控制器 ASP.Net Core

[英]Some value are null AJAX call to controller ASP.Net Core

我正在尝试使用 AJAX 调用将对象通过表单传递到我的控制器。

这是对象,除AuctionId外,所有内容都返回null / 0

public class BidModel
{
    [JsonProperty("BudID")]
    public string BidId { get; set; }
    [JsonProperty("Summa")]
    public int Amount { get; set; }
    [JsonProperty("AuktionID")]
    public string AuctionId { get; set; }
    [JsonProperty("Budgivare")]
    public string Bidder { get; set; }
}

表格:

<form id="createBid">
    <div id="frmBid" class="form-inline">
        <input name="Bidder" asp-for="@bidModel.Bidder" value="@User.Identity.Name" type="hidden" />
        <input name="AuctionId" asp-for="@bidModel.AuctionId" value="@Model.AuctionId" type="hidden" id="auctionId" />
        <label asp-for="@bidModel.Amount" />
        <input name="Amount" asp-for="@bidModel.Amount" />
        <button type="submit" id="submitBtn" class="btn btn-primary">Lägg</button>
    </div>
</form>

这是 AJAX 调用:

$('#createBid').on('submit', function (e)
{
    e.preventDefault();
    var $form = $(this);
    $.ajax({
        url: '@Url.Action("AddBid")',
        type: 'POST',
        dataType: 'html',
        data: JSON.stringify($form.serialize()),
        success: function (html)
        {
            $('#frmBid').html(html);
        }
    });
});

然后我们在控制器中有动作:

[HttpPost]
public async Task<IActionResult> AddBid(BidModel Bid)
{
    var result = await _bidBusinessInterface.CreateBidAsync(Bid, Bid.AuctionId);
    if (result)
    {
        ViewBag.Message = "Bud lagt!";
    }
    else
    {
        ViewBag.Message = "Bud förlågt!";
    }
    return RedirectToAction("ViewDetails", Bid.AuctionId);
}

所以问题是,某些值,而不是所有值都返回null

为什么AuctionId不为null而其他为null

我还尝试创建一个新的 ViewModel,因为我已经在视图中将 Auction 作为 Viewmodel。 我用拍卖和出价做了一个新的,我把表格变成了这样:

<form id="createBid">
            <div id="frmBid" class="form-inline">
                <input asp-for="BidVM.AuctionId" value="AuctionVM.AuctionId" type="hidden" id="auctionId" />
                <label asp-for="BidVM.Amount" />
                <input asp-for="BidVM.Amount" />
                <button type="submit" id="submitBtn" class="btn btn-primary">Lägg</button>
            </div>
        </form>

但现在一切都为空

这在一些代码清理后工作正常。

客户端 - ViewJS

@model MyNamespace.BidModel

@{
    // Assuming you need to use local variable rather than just @model of BidModel type
    // If you can just use model - you will be able to bind imputs like this: 
    // <input name="@nameof(Model.BidId)" value="@Model.BidId" type="hidden" />
    // or
    // <input name="BidId" value="@Model.BidId" type="hidden" />
    // or (even better)
    // just use the tag helper asp-for like this: 
    // <input asp-for="BidId" type="hidden" />

    var bidModel = Model;
}

<form id="createBid">
    <div id="frmBid" class="form-inline">
        <input name="@nameof(bidModel.Bidder)" value="@bidModel.Bidder" type="hidden" />
        <input name="@nameof(bidModel.AuctionId)" value="@bidModel.AuctionId" type="hidden" />
        <input name="@nameof(bidModel.BidId)" value="@bidModel.BidId" type="hidden" />

        <input name="@nameof(bidModel.Amount)" value="@bidModel.Amount" />

        <button type="submit" id="submitBtn" class="btn btn-primary">Add</button>
    </div>
</form>

<script type="text/javascript">
    $(document).ready(function() {

        $('#createBid').on('submit',
            function(e) {
                e.preventDefault();
                var $form = $(this);
                $.ajax({
                    url: '@Url.Action("AddBid")',
                    type: 'POST',
                    data: $form.serialize(),
                    success: function(html) {
                        $('#frmBid').html(html);
                    }
                });
            });
    });
</script>

服务器端 - ControllerModel

using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;

namespace MyNamespace
{
    public class BidModel
    {
        [JsonProperty("BudID")]
        public string BidId { get; set; }
        [JsonProperty("Summa")]
        public int Amount { get; set; }
        [JsonProperty("AuktionID")]
        public string AuctionId { get; set; }
        [JsonProperty("Budgivare")]
        public string Bidder { get; set; }
    }

    public class BidController : Controller
    {
        [HttpGet]
        public async Task<IActionResult> AddBid()
        {
            // For demo purposes - pre-fill some values
            var model = new BidModel
            {
                Bidder = User.Identity.Name,
                Amount = 123,
                AuctionId = "A-ID",
                BidId = "B-ID"
            };

            return View(model);
        }

        [HttpPost]
        public async Task<IActionResult> AddBid(BidModel Bid)
        {
            // save new bid
            // return RedirectToAction("ViewDetails", Bid.AuctionId);

            return View(Bid);
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM