【问题标题】:Controller is only saving 1 variable into database控制器仅将 1 个变量保存到数据库中
【发布时间】:2019-07-11 21:36:30
【问题描述】:

我有一个 HttpPost 控制器,我试图用它从视图中获取数据并将模型数据存储到我的本地 mvc 数据库中。虽然当我测试表单(有 4 个输入供用户输入),提交它然后检查数据库时,只有 School.Date 保存到表中,其他 3 个变量为空(即使我在以及 School.Date)。

我的学校模型:

namespace BookingSys.Models
{
  public class School
  {
    public DateTime Date { get; set; }
    public int Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public int PhoneNumber { get; set; }
  }
}

我的预订视图控制器:

    [HttpGet]
    public ActionResult Booking()
    {
         var model = db.Dates.ToList();
         return View(model);
    }


    [HttpPost]
    public ActionResult Booking(School model)
    {
        db.Schools.Add(model);
        db.SaveChanges();
        return RedirectToAction("Booking");
    }

我的预订视图:

@model List<BookingSys.Models.Datepicker>

@{
  ViewBag.Title = "Booking";
}

<h2>School Bookings</h2>

<form asp-controller="School" asp-action="Booking" method="post">
  <br />
  <div>
    <label for="Date">Choose Date:</label>
    <input asp-for="School.Date" id="txtDate" name="Date" />
  </div>
  <br />
  <div>
    <label for="Name">School Name:</label>
    <input asp-for="School.Name" id="txtName" name="Name: " />
  </div>
  <br />
  <div>
    <label for="Email">Email:</label>
    <input asp-for="School.Email" id="txtEmail" name="Email: " />
  </div>
  <br />
  <div>
    <label for="Phone">Phone Number:</label>
    <input asp-for="School.PhoneNumber" id="txtPhone" name="Phone Number: 
" />
</div>
<br />
<input type="submit" value="Submit" class="submit" />
</form>

<link href="~/Content/themes/base/jquery-ui.min.css" rel="stylesheet" />

// jQuery UI Datepicker
@section scripts {

<script src="~/Scripts/jquery-ui-1.12.1.min.js"></script>
<script>
            jQuery(function () {

                var enableDays = ['@Html.Raw(string.Join("','", 
Model.Select(d => d.Date.ToString("dd-MM-yyyy"))))'];

                console.log(enableDays);

                function enableAllTheseDays(date) {
                    var sdate = $.datepicker.formatDate('dd-mm-yy', date)
                    console.log(sdate)
                    if ($.inArray(sdate, enableDays) != -1) {
                        return [true];
                    }
                    return [false];
                }

                $("#txtDate").datepicker({
                    dateFormat: "dd/MM/yy",
                    beforeShowDay: enableAllTheseDays,



                });

            });
</script>

@Scripts.Render("~/bundles/jqueryval")
}

<style>
 .my-class a {
    background-color: #07ea69 !important;
    background-image: none !important;
    color: #ffffff !important;
}
</style>

这就是数据库上下文的样子;日期保存没问题,但姓名、电子邮件和电话号码由于某种原因没有保存。有人知道为什么吗?

干杯

【问题讨论】:

  • 不要使用号码来存储电话号码。它不会考虑某些情况,例如是否有前导零或特别长的数字。
  • @cost 谢谢伙计,我应该用什么代替?
  • 将其存储为字符串,varchar 应该没问题,除非您出于某种原因希望使用它存储 unicode 字符,然后使用 nvarchar。您需要确保一致地处理存储/加载数字,因为人们使用许多常见的格式。喜欢 () 或 - 或只是数字。如果您以一致的格式存储它们,您可能会更轻松。不过,如果您只是在屏幕上显示它,那么这一点就不那么重要了。

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


【解决方案1】:

您的 name 属性对于您的文本框不正确,日期字段除外。 name 是您 POST 时绑定到模型的内容。

name="Name: " 应该是name="Name",它应该与模型上的字段名称匹配。 (您似乎打算使用 placeholder 属性 - 即 placeholder="Name: "

我实际上认为您不需要手动添加它们,因为当您输入asp-for 时,它应该为您添加idname

因此,只需从您的 asp-for 输入中删除所有 idname 属性即可。

【讨论】:

  • 感谢您的回复。工作正常,除了电话号码。我猜该表单正在将 phoneNumber 的字符串传递给控制器​​?这就是为什么它没有被保存到数据库的 int 列中?如果是这种情况,您知道我该如何解决吗?干杯
  • 看起来它只会将一个小的 int 保存到数据库中。任何大号码,即电话号码都不会保存
  • 是的,这听起来像是一个不同的问题。仅供参考,您可以将 type="number" 添加到您的 PhoneNumber 输入中以将输入限制为整数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-22
  • 2017-11-09
  • 1970-01-01
  • 2018-09-05
  • 1970-01-01
  • 2017-01-23
  • 1970-01-01
相关资源
最近更新 更多