2016-03-21 83 views
0

我在我的页面上有几个input类型的submit字段。对于其中的一些,我希望验证是正常发生的,但其他人则不会。每个submit按钮将表单发回控制器,为每个按钮设置一个命令值。这允许该动作执行相关功能。但是,如果将类cancel添加到相关的input标记中,则不会对它们进行验证。但是,我没有获得发回控制器操作的命令的值。所以我可以不验证或得到一个命令值,但不是两者。停止从特定提交按钮的触发验证

设置;

模型;

public void SubData 
{ 
    public int ID { get; set; } 
} 

public void SomeViewModel 
{ 
    public int ID { get; set; } 
    public List<SubData> Data { get; set; } 
} 

在HTML中;

<input type="submit" name="command" value="AddData" /> 
<input type="submit" name="command" value="DeleteData/> 
<input type="submit" name="command" value="SaveAll/> 

控制器;

public ActionResult Index(SomeViewModel model, string command) 
{ 
    switch (command) 
    { 
     case "AddData": 
      model.Stuff.Add(new SubData()); 
      break; 
     case "DeleteData": 
      // you get the idea... 
      break; 
    } 
} 

Javascript(taken from:https://stackoverflow.com/a/17401660);

$(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触发器验证,一旦验证成功,我会得到command的值。

回答

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; 
    }); 
}); 
+0

的问题不在于我不能关闭验证输入,它是这样做停止'input'价值的subimition从发布到控制器操作 – DiskJunky