You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core 2.2提交竞价时拍卖ID始终传值为0的问题

问题原因分析

你遇到的问题核心是:从Details页面跳转时通过路由传递的auctionItemId和auctionStartingBidAmount,在提交EnterBid表单时没有被携带到POST请求中。

当你点击Details页面的"Submit a Bid"链接时,这两个参数是通过GET请求的路由参数传递到EnterBid的GET页面,但默认情况下,这些路由参数不会自动包含在后续的POST表单提交里。所以当你点击Create按钮提交表单时,控制器的POST方法只能接收到表单里明确包含的字段值,而auctionItemId和auctionStartingBidAmount因为没有对应的表单字段,会被初始化为默认值0。

解决方案

要解决这个问题,我们需要把这两个参数值存储在EnterBid表单的隐藏字段中,这样提交POST请求时就能把它们一起发送到控制器。具体步骤如下:

1. 添加EnterBid的GET控制器方法

首先你需要补充一个接收路由参数的GET版本的EnterBid方法,用来接收从Details页面传递过来的参数,并把它们传递给视图:

// GET: AuctionBids/EnterBid
public IActionResult EnterBid(int auctionItemId, int auctionStartingBidAmount)
{
    // 把参数存入ViewBag,或者直接绑定到模型(推荐后者)
    ViewBag.AuctionItemId = auctionItemId;
    ViewBag.AuctionStartingBidAmount = auctionStartingBidAmount;
    
    // 如果你允许修改AuctionBidModel,更推荐给模型添加对应属性并赋值
    // var bidModel = new AuctionBidModel
    // {
    //     AuctionItemId = auctionItemId,
    //     AuctionStartingBidAmount = auctionStartingBidAmount
    // };
    // return View(bidModel);
    
    return View(new AuctionBidModel());
}

2. 在EnterBid视图中添加隐藏字段

修改EnterBid的表单,添加两个隐藏字段,把从GET方法接收到的参数值存入其中:

<form asp-action="EnterBid">
    <div asp-validation-summary="ModelOnly" class="text-danger"></div>
    
    <!-- 添加隐藏字段,传递auctionItemId和auctionStartingBidAmount -->
    <input type="hidden" name="auctionItemId" value="@ViewBag.AuctionItemId" />
    <input type="hidden" name="auctionStartingBidAmount" value="@ViewBag.AuctionStartingBidAmount" />
    
    <!-- 原有的表单字段 -->
    <div class="form-group">
        <label asp-for="BidderName" class="control-label"></label>
        <input asp-for="BidderName" class="form-control" />
        <span asp-validation-for="BidderName" class="text-danger"></span>
    </div>
    <div class="form-group">
        <label asp-for="BidderPhone" class="control-label"></label>
        <input asp-for="BidderPhone" class="form-control" />
        <span asp-validation-for="BidderPhone" class="text-danger"></span>
    </div>
    <!-- 其他字段保持不变 -->
</form>

更规范的模型绑定方式(可选)

如果你可以修改AuctionBidModel类,建议给它添加对应的属性,这样更符合ASP.NET Core的模型绑定规范:

public class AuctionBidModel
{
    // 原有属性...
    public int AuctionItemId { get; set; }
    public int AuctionStartingBidAmount { get; set; }
}

然后修改GET方法:

public IActionResult EnterBid(int auctionItemId, int auctionStartingBidAmount)
{
    var bidModel = new AuctionBidModel
    {
        AuctionItemId = auctionItemId,
        AuctionStartingBidAmount = auctionStartingBidAmount
    };
    return View(bidModel);
}

视图中的隐藏字段改为使用asp-for绑定:

<input type="hidden" asp-for="AuctionItemId" />
<input type="hidden" asp-for="AuctionStartingBidAmount" />

3. 验证效果

现在当你从Details页面点击"Submit a Bid"链接时,auctionItemId和auctionStartingBidAmount会被传递到EnterBid页面,并存入隐藏字段。提交表单时,这两个值会和其他表单数据一起发送到POST控制器,你就能获取到正确的数值,而不是默认的0了。

内容的提问来源于stack exchange,提问作者ChickenOverlord

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:32:09