繁体   English   中英

C#MVC发布表单未将ID从视图传递到控制器

[英]C# MVC Post form not passing ID from view to controller

我是MVC的新手。 我从事拍卖申请。 在拍卖网站上,应该有一个投标表格。 我将Auction参数传递给控制器​​时遇到问题

我的模特:

public class Auctions
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ID { get; set; }
    public string title { get; set; }
    (..) some other fields
    public List<Bid> bids = new List<Bid>(); 
}

public class BiddingViewModel
{
    public Auctions auctionToSend { get; set; }
    public double bid { get; set; }
}

我的观点:

@model BiddingViewModel

@using(Html.BeginForm("CreateBid", "Auction", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    @Html.HiddenFor(model=>model.auctionToSend)
    @Html.EditorFor(model => model.bid)
    <input type="submit" value="Make it work" />

}

和我的控制器:

[AllowAnonymous]
public ActionResult AuctionPage(int id)
{
    var tmp = _context.Auctions.FirstOrDefault(i => i.ID == id);

    BiddingViewModel bvm = new BiddingViewModel
    {
        auctionToSend = tmp,
        bid = -1
    };

    return View(bvm);
}


[Authorize]
[HttpPost]
public async Task<ActionResult> CreateBid(BiddingViewModel bvm)
{
    //After filling the form from view, the bvm.auctionToSend is null, whereas the bvm.bid value is visible
    return RedirectToAction("AuctionList", "Auction");
}

我的问题是拍卖数据(在视图中完全可见)没有发送回控制器。 我检查了互联网,它显示了一些命名冲突的解决方案,因此我确保命名是不同的,但这不能解决我的问题。

auctionToSend是一个复杂的对象,您对@Html.HiddenFor(model=>model.auctionToSend)正在生成

<input type="hidden" name="auctionToSend" value="yourAssembly.Auctions" ... />

如果您只需要Auctions ID,则使用

 @Html.HiddenFor(m => m.auctionToSend.ID)

否则,您需要为Auctions每个属性生成一个隐藏的输入,但是效率很低,尤其是因为Auctions包含一个作为集合的属性,因此,如果您需要POST方法中的Auctions对象,最好根据您提交的ID值。

附带一提,您确实应该使用仅具有double Bidint AuctionID属性的视图模型

暂无
暂无

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

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