【问题标题】:ASP.NET MVC bool value returned from the view is 1 or 0视图返回的 ASP.NET MVC bool 值为 1 或 0
【发布时间】:2014-10-04 00:09:54
【问题描述】:

我正在使用 ASP.NET MVC,但在使用 CheckBoxFor 时遇到了一些问题。这是我的问题:

我在视图中有以下代码:

@Html.CheckBoxFor(model => model.stade, new { @id = "stade" })

model.stade 是布尔类型。在我的控制器中,我有:

//Editar
[HttpPost]
public ActionResult InvoiceType(int Id, string Name, string Code, string Stade)
{
    clsInvoiceTypea Model = new clsInvoiceType();
    Model.Id = Id;
    Model.Name = Name;
    Model.Code = Code;
    Model.Stade = stade== "1" ? true : false;
    return PartialView(Model);
}

我收到一个错误,因为当Model.Stade 提交到视图时,值是 1 或 0,我收到一个错误说“无法将字符串识别为有效的布尔值”,但如果 Model.stade 是布尔值为什么模型会像 0 或 1 一样提交给视图?我该如何解决这个问题?

【问题讨论】:

  • 与其尝试绑定单个属性,不如绑定模型public ActionResult InvoiceType(clsInvoiceTypea model)
  • 这段代码无法编译(提示:Stade != stade
  • 对不起,那是因为我把代码翻译成英文,我说西班牙语
  • 斯蒂芬,问题是因为模型有一个布尔值 Model.Stade 并且操作 public ActionResult InvoiceType() 为 Model.Stade 得到 1 或 0,这个值是布尔值然后得到一个错误

标签: asp.net-mvc boolean model-binding checkboxfor


【解决方案1】:

这是我的解决方案 -

让你的模型成为 -

public class clsInvoiceTypea
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Code { get; set; }
        public bool stade { get; set; }
    }

让你的 HttpGet Action 成为 -

public ActionResult GetInvoice()
{
    clsInvoiceTypea type = new clsInvoiceTypea();
    return View(type);
}

以及对应的视图——

@model YourValidNameSpace.clsInvoiceTypea

@{
    ViewBag.Title = "GetInvoice";
}

<h2>GetInvoice</h2>

@using (Html.BeginForm("SubmitData","Home",FormMethod.Post)) {
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>clsInvoiceTypea</legend>

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

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

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

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

让以下成为您的 HttpPost 操作 -

[HttpPost]
public ActionResult SubmitData(clsInvoiceTypea model)
{
    return View();
}

当你运行代码时,你会得到以下视图 -

当你选中复选框并点击创建按钮时,如果你在 POST 方法上放置一个断点并检查值,你会得到 true。

【讨论】:

  • 谢谢,但问题是当我将 model.stade 值从视图发送到控制器时,收到 1 或 0 并且当从控制器发送模型到视图时是相同的,该值为 1 或 0,这会出错,因为 model.state 是 bool 类型并且不接受数字
  • 我不明白为什么布尔值会更改为数字?
  • 公共类 clsInvoiceType { public int Id { get;放; } [Required(ErrorMessage = "El nombre es obligatorio")] public string Name { get;放; } [Required(ErrorMessage = "El código es obligatorio")] public string Code { get;放; } 公共布尔体育场 { 得到;放; }}
  • 对不起,我不知道如何在这个论坛中换行
  • 问题很奇怪,当我将模型从控制器发送到视图@Html.CheckBoxFor(model => model.stade, new { @id = "stade" }) 接收到1或 0 并出现错误,当我将模型从视图发送到操作 public ActionResult InvoiceType(clsInvoiceType model) 属性 Stade 收到 1 或 0 并出现错误,因为无法将数字转换为布尔值, 我该怎么办?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-19
  • 2011-10-15
  • 1970-01-01
  • 1970-01-01
  • 2012-01-05
  • 2010-10-06
  • 1970-01-01
相关资源
最近更新 更多