我的网页上有几个类型为input
的{{1}}个字段。对于其中一些我希望验证正常发生,但在其他情况下我不这样做。每个submit
按钮将表单发回给控制器,为每个按钮设置一个命令值。这允许动作执行相关功能。但是,如果我将类submit
添加到相关的cancel
标记,则不会对它们进行验证。但是,我没有获得发回控制器操作的命令的值。所以我可以不验证或获取命令值,但不能同时使用。
设置;
模型;
input
在HTML中;
public void SubData
{
public int ID { get; set; }
}
public void SomeViewModel
{
public int ID { get; set; }
public List<SubData> Data { get; set; }
}
控制器;
<input type="submit" name="command" value="AddData" />
<input type="submit" name="command" value="DeleteData/>
<input type="submit" name="command" value="SaveAll/>
Javascript(取自:https://stackoverflow.com/a/17401660);
public ActionResult Index(SomeViewModel model, string command)
{
switch (command)
{
case "AddData":
model.Stuff.Add(new SubData());
break;
case "DeleteData":
// you get the idea...
break;
}
}
所以,如果我有$(function () {
// allow delete actions to trigger a submit without activating validation
$(document).on('click', 'input[type=submit].cancel', function (evt) {
// find parent form, cancel validation and submit it
// cancelSubmit just prevents jQuery validation from kicking in
$(this).closest('form').validate().cancelSubmit = true;
$(this).closest('form').submit();
return false;
});
});
,那么验证就不会发生(耶!)但我没有在动作参数<input type="submit" class="cancel" value="AddSomething" />
中提供任何值(嘘!)。取出command
触发器验证,验证完成后我会得到cancel
的值。
答案 0 :(得分:0)
尝试使用evt.preventDefault()
来阻止此输入的定位
$(function () {
// allow delete actions to trigger a submit without activating validation
$(document).on('click', 'input[type=submit].cancel', function (evt) {
//use the preventDefault() to stop any submition from here
evt.preventDefault();
// find parent form, cancel validation and submit it
// cancelSubmit just prevents jQuery validation from kicking in
$(this).closest('form').validate().cancelSubmit = true;
$(this).closest('form').submit();
return false;
});
});