簡體   English   中英

如何獲取要發布到 controller 的復選框值列表

[英]How do I get a list of checkbox values to post to my controller

我有一個帶有復選框列表的視圖。 它顯示得很好,但在 Post 上,我的列表的 count=0。 我在 SO 上看到了一堆帖子,它們都說同樣的話,我試過了,但它不起作用,所以我一定遺漏了一些東西。

我的視圖模型:

public class ParentViewModel 
{
    public ParentViewModel()
    {
        ClassOfTradeList = new List<CheckBoxListItem>();
    }

    public string Name { get; set; }
    public List<CheckBoxListItem> ClassOfTradeList { get; set; }
}

public class CheckBoxListItem
{
    public long Id { get; set; }
    public string Name { get; set; }
    public bool IsSelected { get; set; }
}

然后我的觀點:

@model app.Models.ViewModels.ParentViewModel

// other parent fields

@for (int i = 0; i < Model.ClassOfTradeList.Count; i++)
{
    @Html.CheckBoxFor(m => m.ClassOfTradeList[i].IsSelected)
    @Html.HiddenFor(m => m.ClassOfTradeList[i].Id)
    @Html.LabelFor(m => m.ClassOfTradeList[i].IsSelected, Model.ClassOfTradeList[i].Name)
    <br />
}

我在 controller 的帖子:

public ActionResult ParentReturn(ParentViewModel model)
{

}

我的得到:

[HttpGet]
public ActionResult Parent()
{
    var model = new ParentViewModel();
    //fill in properties here
    model.ClassOfTradeList = ClassOfTradeList();
    return View(model);
}

private List<CheckBoxListItem> ClassOfTradeList()
    {
        var classofTrades = _tradeRepo.GetAll().Where(c => c.IsDeleted == false).ToList();
        var classOfTradeList = new List<CheckBoxListItem>();
        classOfTradeList = classofTrades.Select(c => new CheckBoxListItem
        {
            Name = c.Name,
            Id = c.Id
        }).ToList();

        return classOfTradeList;
    }

所以當我回到 controller 時,model.ClassOfTrades.Count = 0。 我錯過了什么?

我想到了。 當我第一次嘗試解決這個問題時,我說:

@Html.HiddenFor(m => m.ClassOfTradeList)

在視圖的開頭。 它稍后在視圖中覆蓋了我對 id 的 hiddenfor。

感謝你的幫助。 因此,刪除它並保留我發布的代碼使其工作。

您可能應該使用“Model.ClassOfTradeList[i].Name”而不是 Id。

@using (Html.BeginForm("ParentReturn", "Home", FormMethod.Post))
{
    for (int i = 0; i < Model.ClassOfTradeList.Count; i++)
    {
        @Html.CheckBoxFor(model => Model.ClassOfTradeList[i].IsSelected);
        @Html.HiddenFor(model => Model.ClassOfTradeList[i].Name);
        @Html.LabelFor(model => Model.ClassOfTradeList[i].IsSelected, Model.ClassOfTradeList[i].Name);
        <br />
    }
    <input type="submit" value="click" />
}

https://dotnetfiddle.net/C0trTW

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM