c# MVC Post表单没有从视图传递ID到控制器
本文关键字:ID 控制器 视图 Post MVC 表单 | 更新日期: 2023-09-27 18:03:17
我是MVC新手。我在做一个拍卖应用程序。在拍卖网站上,应该有一个形式,使出价。我有一个问题,将拍卖参数传递给控制器
My models:
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 Bid
和int AuctionID