Prima dată când am venit împotriva acestui lucru am venit cu un hack onclick() / JS atunci când alegerile nu sunt prev / next pe care încă îmi place pentru simplitatea lui. Ea merge astfel:
@model myApp.Models.myModel
<script type="text/javascript">
function doOperation(op) {
document.getElementById("OperationId").innerText = op;
// you could also use Ajax to reference the element.
}
</script>
<form>
<input type="text" id = "TextFieldId" name="TextField" value="" />
<input type="hidden" id="OperationId" name="Operation" value="" />
<input type="submit" name="write" value="Write" onclick='doOperation("Write")'/>
<input type="submit" name="read" value="Read" onclick='doOperation("Read")'/>
</form>
Atunci când se face clic pe butonul de trimitere, se stochează operația dorită într-un câmp ascuns (care este un câmp de șir inclus în modelul cu care se asociază formularul) și trimite formularul către Controlor, care face totul decizia. În Controller, scrieți pur și simplu:
// Do operation according to which submit button was clicked
// based on the contents of the hidden Operation field.
if (myModel.Operation == "Read")
{
// do read logic
}
else if (myModel.Operation == "Write")
{
// do write logic
}
else
{
// do error logic
}
Puteți, de asemenea, să strângeți ușor acest lucru folosind codurile de operare numerice pentru a evita parsarea șirului, dar dacă nu jucați cu Enums, codul este mai puțin lizibil, modificabil și autocumentant, iar parsarea este trivială oricum.