C # MVC Почтовая форма не передает идентификатор от просмотра к контроллеру

c# asp.net-mvc post http-post

1573 просмотра

1 ответ

Я новичок в MVC. Я работаю над заявкой на аукцион. На сайте аукциона должна быть форма для подачи заявки. У меня проблема с передачей параметра аукциона в контроллер

Мои модели:

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

Моя проблема в том, что данные аукциона (отлично видимые в представлении) не отправляются обратно в контроллер. Я проверил интернет, и он показал мне некоторые решения конфликтов имен, поэтому я убедился, что наименование отличается, но это не решило мою проблему.

Автор: Simon Источник Размещён: 08.11.2019 11:06

Ответы (1)


2 плюса

Решение

auctionToSendэто сложный объект, и ваше использование @Html.HiddenFor(model=>model.auctionToSend)создает

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

Если вам просто нужен идентификатор Auctions, используйте

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

в противном случае вам нужно создать скрытый вход для каждого свойства, Auctionsно это было бы неэффективно, особенно если оно Auctionsсодержит свойство, являющееся коллекцией, поэтому, если вам нужен Auctionsобъект в методе POST, лучше просто получить его снова на основе значения идентификатора ваша отправка.

Как примечание, вы действительно должны использовать модель представления с только свойствами для double Bidиint AuctionID

Автор: user3559349 Размещён: 20.08.2016 09:37
Вопросы из категории :
32x32