2016-03-21 6 views
0

Ich habe mehrere input Felder des Typs submit auf meiner Seite. Für einige von diesen möchte ich Validierung als normal auftreten, aber in anderen nicht. Jede Schaltfläche submit sendet das Formular zurück an den Controller und legt einen Befehlswert für jede Schaltfläche fest. Dies ermöglicht der Aktion, die relevante Funktion auszuführen. Wenn ich jedoch die Klasse cancel zu dem relevanten Tag input hinzufüge, tritt für sie keine Validierung auf. Aber dann bekomme ich keinen Wert für den Befehl zurück in die Controller-Aktion. Also kann ich entweder nicht validieren oder einen Befehlswert erhalten, aber nicht beides.Stoppen Sie unaufdringlich aus Triggerung für bestimmte senden Schaltflächen

Um einzurichten;

Modelle;

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

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

In HTML;

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

Controller;

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 (übernommen von: 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; 
    }); 
}); 

Also, wenn ich <input type="submit" class="cancel" value="AddSomething" /> dann Validierung nicht auftritt (yay!), Aber ich bekomme keinen Wert in den Parameter command Handeln geliefert (boo!). Das Herausnehmen von cancel löst die Validierung aus und ich bekomme einen Wert für command, sobald die Validierung in Ordnung ist.

Antwort

0

Try evt.preventDefault() zu verwenden, um die subimition dieses Eingangs

$(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

Die Frage ist nicht zu verhindern, dass ich nicht die Validierung am Eingang ausschalten kann, ist es, das zu tun, so stoppt den 'input' Wert vom Posten in die Controller-Aktion – DiskJunky