【问题标题】:class member 'required' data attribute not throwing error but not saving to db either类成员“必需”数据属性不抛出错误但也不保存到数据库
【发布时间】:2015-04-17 19:14:32
【问题描述】:

我在这里有一个“YogaSpaceOverview”类,它的标题属性具有必需的属性。 我的问题! 当我传入一个空白“”的标题时,什么也没有发生,它不会被保存到数据库中,但不会像它应该的那样从“[required]”属性中抛出错误或异常。 注意 - 没有表单提交,我在 jquery .post 中做所有事情。如果有值并且如果没有抛出错误消息并且不保存到数据库,我唯一的选择是检查 jquery 吗?我在这里有什么选择?我认为使用 asp mvc 进行服务器端和客户端验证会有更多选择!

public class YogaSpaceOverview
{
    [Required]
    [MaxLength(35, ErrorMessage = "Title cannot be greater then 35 characters.")]
    public string Title { get; set; }
    //other members left out for space saving
}

我有一个允许您编辑标题的页面,但没有表单提交,保存是通过如下所示的 jQuery .change() 事件进行的。

$('#Overview_Title').change(function() {
  var id = $(this).data('id');
  var url = $(this).data('url');
  var title = $(this).val();
  $.post(url, {
      ID: id,
      Title: title
    }, function(data) {
      // do something with the returned value e.g. display a message?
      //        // for example - if(data) { // OK } else { // Oops }
      //alert("success");
      $("#successmessage").show().delay(5000).fadeOut();
    })
    .fail(function() {
      alert("error");
    });
});
<div id="overview">
  <div class="form-group">
    @Html.LabelFor(model => model.Overview.Title, new { @class = "control-label" }) @Html.EditorFor(model => model.Overview.Title, new { htmlAttributes = new { @class = "form-control", data_id = Model.YogaSpaceId, data_url = Url.Action("UpdateTitle", "ManageSpaces")
    } }) @Html.ValidationMessageFor(model => model.Overview.Title, "", new { @class = "text-danger" })
  </div>
  <div class="form-group">
    @Html.LabelFor(model => model.Overview.Summary, new { @class = "control-label" }) @Html.EditorFor(model => model.Overview.Summary, new { htmlAttributes = new { @class = "form-control", data_id = Model.YogaSpaceId, data_url = Url.Action("UpdateSummary",
    "ManageSpaces") } }) @Html.ValidationMessageFor(model => model.Overview.Summary, "", new { @class = "text-danger" })
  </div>
</div>

在 C# 中更新标题如下所示

[HttpPost]
public ActionResult UpdateTitle(int id, string title)
{
    //update database
    YogaSpace yogaSpace = yogaSpaceRepository.Find(id);
    yogaSpace.Overview.Title = title;
    yogaSpaceRepository.InsertOrUpdate(yogaSpace);
    yogaSpaceRepository.Save();

    return Json(true); // don't return view because it gets refreshed
}

我可以获得瑜伽空间并将其传递给 insertorupdate,如下所示。

public void InsertOrUpdate(YogaSpace yogaSpace)
{
    if (yogaSpace.YogaSpaceId == default(int))
    {
        context.Entry(yogaSpace).State = System.Data.Entity.EntityState.Added;
    }
    else
    {
        context.Entry(yogaSpace).State = System.Data.Entity.EntityState.Modified;
    }
}

【问题讨论】:

    标签: javascript c# jquery asp.net-mvc client-side-validation


    【解决方案1】:

    由于您使用 ajax 执行此操作,因此客户端无法知道您的属性是 Required。这按预期工作 - 服务器看到您的模型无效,因此不会保存记录。

    您需要自己检查客户端的值并告诉用户这是必需的。

    【讨论】:

      猜你喜欢
      • 2012-05-17
      • 2019-09-22
      • 1970-01-01
      • 2014-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-08
      • 2020-09-28
      相关资源
      最近更新 更多