【问题标题】:Remote validation causes submit inputs (multiple-submit-buttons) to be null远程验证导致提交输入(多个提交按钮)为空
【发布时间】:2017-07-04 19:28:03
【问题描述】:

我最近在我的表单中实现了远程验证:

视图模型:

[Remote("IsTagUnique", "myController", "myArea", ErrorMessage = "This tag already exists.")]
public string tag { get; set; }

控制器:

        public ActionResult IsTagUnique(string tag)
        {
            using (db)
            {
                try
                {
                    var myTag = db.ASAuftraege.Single(m => m.tag == tag);
                        return Json(false, JsonRequestBehavior.AllowGet);
                    }                        
                }
                catch (Exception)
                {
                    return Json(true, JsonRequestBehavior.AllowGet);
                }
            }
        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult myView(string Send){ 
            // doSomething 
        }

视图(称为“myView”)

@Html.TextBoxFor(m => m.tag) @Html.ValidationMessageFor(m => m.tag)


<button class="form-button-submit" type="submit" name="Send" value="Send">Send</button>

验证工作得很好。

问题是:当我单击发送按钮而不手动触发标记字段上的验证一次时,单击字段然后单击其他位置,“IsTagUnique”函数在 myView() 函数之前执行。这导致我的提交输入(我实际上有多个发送按钮,就像视图中显示的那个(当然不同的名称/值)为空。知道我能做什么吗?我尝试通过手动触发验证聚焦和模糊标记字段,并通过触发更改事件。但不会触发验证。

【问题讨论】:

    标签: model-view-controller unobtrusive-javascript remote-validation


    【解决方案1】:

    搜索了一段时间后,我发现这似乎是一个已知的错误:

    当使用远程方法验证字段的表单时会出现此问题。如果在验证器触发后按下提交按钮,则一切正常,请求将包含单击的提交按钮名称/值对。 但是,如果在按下提交按钮之前未触发远程方法,则生成的请求将不包含提交按钮值/对。

    对我有用的解决方案是这个:

    $(function() {
    $('button[type=submit]').click(function () {
        $('<input>').attr({
            type: 'hidden',
            name: this.name,
            value: this.value
        }).appendTo($(this).closest('form'));
    });
    });
    

    感谢arturoribes

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-11
      • 2016-02-07
      • 1970-01-01
      • 1970-01-01
      • 2014-02-16
      • 2016-12-22
      相关资源
      最近更新 更多