添加选中的复选框在视图模型列出(add checked checkboxes to list in

2019-10-19 09:24发布

我工作的一个C#应用程序,用户可以在这里发布的笑话。 这些笑话可以具有多个类别,例如一个衬里或卡盘诺里斯。 所以在我创建一个笑话视图我有类别多个复选框。

目前,当我创建一个笑话,我得给一个列表参数,在所有类别。

视图:

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)

<fieldset>
    <legend>CreateJokeViewModel</legend>

    <div class="editor-field">
        @Html.EditorFor(model => model.UserId)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.JokeTitle)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.JokeTitle)
        @Html.ValidationMessageFor(model => model.JokeTitle)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.JokeText)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.JokeText)
        @Html.ValidationMessageFor(model => model.JokeText)
    </div>


    <div class="editor-label">
        @Html.LabelFor(model => model.categories)
    </div>
    <div class="editor-field">
        <table>
    @using (var db = new Witze.Context())
    {

        foreach (Witze.Categorie categorie in db.Categories)
        {
            <tr>
                <td>@Html.CheckBox(categorie.Name)</td>
                <td>@Html.Label(categorie.Name)</td>
            </tr>
        }
    }

        </table>
    </div>
    <p>
        <input type="submit" value="Create" />
    </p>
</fieldset>

}

视图模型:

[HiddenInput(DisplayValue = false)]
public int UserId { get; set; }

[Required]
public string JokeTitle { get; set; }

[Required]
public string JokeText { get; set; }

[Required]
public HashSet<Categorie> categories { get; set; }

控制器:

public ActionResult Create(CreateJokeViewModel viewModel)
{
    List<string> list = new List<string> { "ThisIsACategorie" };
    var user = db.User.Single(u => u.UserId == viewModel.UserId);
    if (ModelState.IsValid)
    {
        Logik.CreateJoke(viewModel.JokeTitle, viewModel.JokeText, user.UserId, list);
        db.SaveChanges();
        return RedirectToAction("witze", "user", new { userid = viewModel.UserId });
    }
    return View(viewModel);
}

所以,我希望所有的检查类别在列表中。 我很新的MVC和我不太似乎找到了答案......

谢谢

Answer 1:

所以,我希望所有的检查类别在列表中。

随着视图模型变化不大,就可以得到如下图所示检查了提交值 -

让你的模型是这样的 -

public class CheckboxlistViewModel
{
    public int UserId { get; set; }
    public string JokeTitle { get; set; }
    public string JokeText { get; set; }
    public List<Categorie> categories { get; set; }
}

public class Categorie
{
    public string Category { get; set; }
    public bool IsSelected { get; set; }
}

观察有IsSelected与Categorie视图模型相关联的属性。 该属性可以帮助我们提交表单时坚持复选框的选择。

现在,这使得形式操作如下 -

    public ActionResult Index()
    {
        CheckboxlistViewModel model = new CheckboxlistViewModel();
        model.categories = new List<Categorie>();
        model.categories.Add(new Categorie() { Category = "Chuck Norris", IsSelected = false });
        model.categories.Add(new Categorie() { Category = "One Liner", IsSelected = false });
        return View(model);
    }

和形式是,如下所示 -

    @model MVC.Controllers.CheckboxlistViewModel

    @{
        ViewBag.Title = "Index";
    }

    <h2>Index</h2>

    <div>
    @using (Html.BeginForm("Submit", "Checkboxlist",FormMethod.Post))
    {
        for (int i = 0; i < Model.categories.Count; i++)
        {
            @Html.HiddenFor(m => m.categories[i].Category)
            @Html.CheckBoxFor(m => m.categories[i].IsSelected) @Html.Label(Model.categories[i].Category)
        }
        <input type="submit" value="Submit"/>
    }
    </div>

现在,当我们点击提交按钮,它会打击以下措施 -

    public ActionResult Submit(CheckboxlistViewModel model)
    {
        return null;
    }

如果我们检查返回的模型中,我们都被选择作为复选框布尔值,如下图所示。

注意:如果你想坚持复选框文本,然后在添加hiddenfield的范畴领域循环。



Answer 2:

我以前曾在这个月,我想你想同样的事情,我发现了一个解决的办法。 去这个网站它有完美的解决方案,以它http://www.overpie.com/jquery/articles/jquery-get-selected-checkboxes

我的答案,如果它的工作原理:)



文章来源: add checked checkboxes to list in ViewModel