【问题标题】:checkboxfor always return false复选框总是返回 false
【发布时间】:2021-08-24 12:18:17
【问题描述】:

我有一个关于绑定checkboxfor 的奇怪问题。

public async Task<IActionResult> Save(TblCoordinators tb)    
{
    try
    {
        tb.Modified = DateTime.UtcNow;
      
        _context.TblCoordinators.Update(tb);
        await _context.SaveChangesAsync();
        _toastNotification.AddSuccessToastMessage("Data has been updated successfully");
       
        return PartialView("_Edit",ModelView);
    }
    catch(Exception ex)
    {
        _toastNotification.AddErrorToastMessage("Something went wrong.");
        return NoContent();
    }  
}

在我看来我有

<form asp-action="Save"
      data-ajax="true"
      data-ajax-method="POST"
      data-ajax-mode="replace"
      data-ajax-update="#edit"
      method="post">

    <div class="border">
        <div class="row">
            <div class="col-12">
                <h5 class="heading">Main Details</h5>
            </div>

            <div class="col-12">
                <div class="row p-2">
                    <div class="col-6">
                        <div class="form-group">
                            <label class="control-label">Title</label>
                            <input asp-for="@Model.infoList[0].title" class="form-control" name="Title" required />
                            <input type="hidden" asp-for="@Model.infoList[0].coordinatorID" class="form-control" name="coordinatorID"  />
                            <input type="hidden" asp-for="@Model.infoList[0].created" class="form-control" name="created"  />
                        </div>
                        <div class="form-group">
                            <label class="control-label">
                                Contact Name
                            </label>
                            <input asp-for="@Model.infoList[0].contactName" class="form-control" name="contactName" />
                        </div>
                        <div class="form-group">
                            <label class="control-label">
                                Telephone
                            </label>
                            <input asp-for="@Model.infoList[0].telephone" class="form-control" name="telephone" />
                        </div>
                        <div class="form-group">
                            <label class="control-label">
                                Active
                            </label>
                            @Html.CheckBoxFor(x=>x.infoList[0].active, new { @class= "form-check-input" })
                        </div>
                        <button type="submit" class="btn btn-primary w-50 ">Save</button>
                    </div>
                    <div class="col-6">
                        <div class="form-group">
                            <label class="control-label">
                                Address Line 1
                            </label>
                            <input asp-for="@Model.infoList[0].addressLine1" class="form-control" name="addressLine1" />
                        </div>
                        <div class="form-group">
                            <label class="control-label">
                                address Line 2
                            </label>
                            <input asp-for="@Model.infoList[0].addressLine2" class="form-control" name="addressLine2" />
                        </div>
                        <div class="form-group">
                            <label class="control-label">
                                City
                            </label>
                            <input asp-for="@Model.infoList[0].addressCity" class="form-control" name="addressCity" />
                        </div>
                        <div class="form-group">
                            <label class="control-label">
                                County
                            </label>
                            <input asp-for="@Model.infoList[0].addressCounty" class="form-control" name="addressCounty" />
                        </div>
                        <div class="form-group">
                            <label class="control-label">
                                Postcode
                            </label>
                            <input asp-for="@Model.infoList[0].addressPostcode" class="form-control" name="addressPostcode" />
                        </div>
                    </div>
                </div>
            </div>

        </div>
    </div>
</form>

我得到的所有数据都是正确的,除了 checkBox 的布尔值!!
我之前为 checkBox 做过类似的事情,但在这种情况下,我不知道为什么它不起作用。另外,我试图从中获得它的价值:

<input type="checkbox" name="x" />

在这样的控制器中:

public async Task<IActionResult> Save(TblCoordinators tb, bool x)

但它仍然总是错误的!

【问题讨论】:

  • 你观察到呈现的 HTML 了吗?
  • 别说checkboxfor了,为什么我不能这样绑定: Save(TblCoordinators tb, bool x) ??
  • 嗨@PariaShiri,关于这个案例有什么更新吗?

标签: c# asp.net-core-mvc razor-pages


【解决方案1】:

我想你可能误解了复选框。

type=checkbox name=x中,如果省略了value属性,则复选框的默认值是开启的,所以这种情况下提交的数据将是x=on而不是true或false。

您可以在doc 中看到checkbox

在你的情况下,下面是一个简单的演示。你可以查看它。

型号:

 public class info
{
    public string contactName { get; set; }
    public bool active { get; set; }
}
public class TblCoordinators
{
    public List<info> infoList { get; set; }
}

索引视图:

@model TblCoordinators

<form asp-action="Save" method="post">
<div class="form-group">
    <label class="control-label">
        Contact Name
    </label>
    <input asp-for="@Model.infoList[0].contactName" class="form-control" />
</div>
<div class="form-group">
    <label class="control-label">
        Active
    </label>
        @Html.CheckBoxFor(x => x.infoList[0].active, new { @class = "form-check-input" })
</div>
<input type="submit" value="Save" />
</form>

行动:

 public IActionResult Index()
    {
      
        return View();
    }
    
    [HttpPost]
    public IActionResult Save(TblCoordinators tb)
    {
        //....
        return View("Index");
    }

测试结果:

【讨论】:

  • 感谢您的彻底回复,我知道这种方式。有没有办法重命名@Html.CheckBoxFor?或任何单独捕获它的方法由于某种原因无法以这种方式捕获对象。
【解决方案2】:

你试过了吗

<input asp-for="@Model.infoList[0].active" class="form-control" name="active" />

【讨论】:

    猜你喜欢
    • 2019-03-13
    • 1970-01-01
    • 2020-06-16
    • 2012-02-16
    • 1970-01-01
    • 2014-10-13
    • 1970-01-01
    相关资源
    最近更新 更多