【问题标题】:Cannot check checkbox in ASP.NET Core MVC view无法选中 ASP.NET Core MVC 视图中的复选框
【发布时间】:2020-09-11 09:12:38
【问题描述】:

我目前正在开发一个 ASP.NET Core 3.1 MVC 应用程序。我需要创建一个动态复选框菜单,它显示可用的水果并将选定的水果存储到另一个数据源中。

我的问题是,我无法检查/单击视图上的任何复选框并将所选项目发送回我的控制器。

我的 FruitsViewModel 看起来像这样:

public class FruitsViewModel
{
    public IList<string> SelectedFruits { get; set; } = new List<string>();

    public IList<SelectListItem> AvailableFruits { get; set; } = new List<SelectListItem>();
}

我的 FruitsController 看起来像这样:

public class FruitsController : Controller
{
    [HttpGet]
    public async Task<IActionResult> Index()
    {
        var viewModel = new FruitsViewModel { 
                                                  AvailableFruits = GetAvailableFruits()
                                                };

        return View(viewModel);
    }

    [HttpPost]
    public async Task<IActionResult> Index(FruitsViewModel fruitsViewModel)
    {
        // ... process data
    }

    private IList<SelectListItem> GetAvailableFruits()
    {   
        // the values are originally retrieved from a DB, here I use just sample data   
        return new List<SelectListItem>
                       {
                           new SelectListItem {Text = "Apple", Value = "Apple"},
                           new SelectListItem {Text = "Pear", Value = "Pear"},
                           new SelectListItem {Text = "Banana", Value = "Banana"},
                           new SelectListItem {Text = "Orange", Value = "Orange"},
                       };
    }
}

我的 FruitsController Index.cshtml 视图如下所示:

<form method="post">
    <div class="form-group row">
        <!-- Fruits -->
        <label class="col-4">Fruits</label>
        <div class="col-8">
            @foreach (SelectListItem availableFruit in Model.AvailableFruits)
            {
                <div class="custom-control custom-checkbox custom-control-inline">
                    <label class="custom-control-label">
                        <input type="checkbox"
                               class="custom-control-input"
                               name="SelectedFruits"
                               value="@availableFruit.Value"
                               @if (Model.SelectedFruits.Contains(availableFruit.Value))
                               {
                                   @:checked
                               }/>
                        @availableFruit.Text
                    </label>
                </div>
            }
        </div>
    </div>
    <div class="form-group row">
        <div class="offset-4 col-8">
            <button name="submit" type="submit" class="btn btn-info">Send</button>
        </div>
    </div>
</form>

您知道如何检查在 ASP.NET Core MVC 视图上动态加载的复选框并将选定的值相应地发送回控制器吗?

如果可能我不想使用 jQuery。

我已经关注了这个类似的post

【问题讨论】:

  • 有道理。模型中的值在 get 方法中是硬编码的,每次提交表单时,您都会通过 get 重定向到 Index。因此,您更改的任何内容都会重置为其原始值。
  • 感谢您的评论。我相应地更改了我的演示 - 硬编码数据仅用于示例。 :)
  • 我仍然无法点击视图上的任何复选框
  • 使用上面的代码,而不是重定向到索引,你只需要fruitsViewModel.AvailableFruits = GetAvailableFruits(); return View(fruitsViewModel);。这样选定的选项就会被保留。

标签: c# html checkbox asp.net-core-mvc


【解决方案1】:

我无法选中/单击视图上的任何复选框并将所选项目发送回我的控制器。

您可以尝试修改如下代码以动态生成checkbox(es) with Bootstrap styles

<div class="col-8">
    @foreach (SelectListItem availableFruit in Model.AvailableFruits)
    {
        <div class="custom-control custom-checkbox custom-control-inline">
            <input type="checkbox" id="@availableFruit.Value"
                    class="custom-control-input"
                    name="SelectedFruits"
                    value="@availableFruit.Value"
                    @if (Model.SelectedFruits.Contains(availableFruit.Value)) { @: checked
                    } />
            <label class="custom-control-label" for="@availableFruit.Value">@availableFruit.Text</label>
        </div>
                
    }
</div>

测试结果

选中的选项

在action方法中获取检查值

【讨论】:

  • 谢谢韩飞。确实,它就像一个魅力。没有 id 就不行了,看来我忘记了这个人。祝你有美好的一天。
  • It wouldn't work without the id though 是的,输入字段的id属性和标签的for属性应该匹配。很高兴听到问题得到解决。
猜你喜欢
  • 1970-01-01
  • 2015-12-22
  • 1970-01-01
  • 2011-02-19
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多