我最近在表单中实现了远程验证:
视图模型:
[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>
验证工作完全正常。
问题是:当我点击发送按钮而没有手动触发标记字段上的验证时,只需单击该字段,然后单击其他地方的&#34; IsTagUnique&#34;函数在myView() - 函数之前执行。这导致我的提交输入(我实际上有多个发送按钮,就像视图中显示的那个(当然不同的名称/值)是null。任何想法我能做什么?我尝试通过给出手动触发验证关注和模糊标记字段,并触发更改事件。但是,不会触发验证。
答案 0 :(得分:1)
经过一段时间的搜索,我发现这似乎是一个已知的错误:
当使用远程方法验证字段的表单时会发生此问题。如果在验证器触发后按下提交按钮,则一切正常,请求将包含单击的提交按钮名称/值对。 但是,如果在按下提交按钮之前未触发远程方法,则生成的请求将不包含提交按钮值/对。
对我有用的解决方案是:
$(function() {
$('button[type=submit]').click(function () {
$('<input>').attr({
type: 'hidden',
name: this.name,
value: this.value
}).appendTo($(this).closest('form'));
});
});
归功于arturoribes