2016-08-20 74 views
1

我是MVC的新手。我正在拍賣申請。在拍賣網站上,應該有一個拍賣表格。我通過拍賣參數控制器C#MVC發佈表單不會將ID從視圖傳遞到控制器

我的模型的一個問題:

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"); 
} 

我的問題是,拍賣數據(在視圖中完全可見)不會被髮送回控制器。我查了一下互聯網,它向我展示了一些命名衝突的解決方案,所以我確定命名是不同的,但是這並沒有解決我的問題。

回答

2

auctionToSend是一個複雜的對象,你的@Html.HiddenFor(model=>model.auctionToSend)用途產生

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

如果你只需要Auctions的ID,然後用

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

否則,你需要生成一個隱藏的輸入對於每個屬性Auctions但這將是低效的,特別是因爲Auctions包含屬性是一個集合,所以如果你需要Auctions對象在POST方法中,最好根據您提交的ID值重新獲取。

作爲一個側面說明,你真的應該使用與該double Bidint AuctionID

+0

你好,斯蒂芬,感謝您的回覆只是性能視圖模型。我有點困惑。我需要將拍賣從控制器傳遞到視圖(AuctionPage方法),因此在視圖我的模型中至少需要@model拍賣。那麼如何僅將這一對(auction.ID和bid)傳遞迴控制器? CreateBid函數應該使用哪些參數? – Simon

+0

如果您只是使用'@ Html.HiddenFor(m => m.auctionToSend.ID)',那麼'bvm'的Auction'屬性將在POST方法中被初始化並且它的ID將被綁定(但是其他屬性'拍賣'將是'空') –

+0

是啊!有效!非常感謝 - 只有一個問題。我認爲你的意思是我「不應該」使用視圖模型 - 所以如果我想從項目中刪除我的視圖模型並使用@model拍賣,我將如何將auction.ID和bid(用戶輸入)都傳遞給控制器? – Simon

相關問題