Ho un controller per mostrare un modello (Utente) e voglio creare uno schermo con solo un pulsante per attivare. Non voglio campi nel modulo. Ho già l'id nell'URL. Come posso realizzare questo?Come posso creare un httppost con gli stessi parametri da httpget?
risposta
si potrebbe usare un campo nascosto all'interno del modulo:
<% using (Html.BeginForm()) { %>
<%= Html.HiddenFor(x => x.Id) %>
<input type="submit" value="OK" />
<% } %>
o farli l'azione del modulo:
<% using (Html.BeginForm("index", "home",
new { id = RouteData.Values["id"] }, FormMethod.Post)) { %>
<input type="submit" value="OK" />
<% } %>
Il modo più semplice per tale situazione semplice è quello di dare un nome per inviare il pulsante e controllare in azione se ha valore o meno. Se si ha il valore, allora Posta azione, se non, allora Ottenere azione:
<% using (Html.BeginForm("index", "home",
new { id = RouteData.Values["id"] }, FormMethod.Post)) { %>
<input type="submit" value="OK" name="btnActivate" />
<% } %>
per CS è possibile combinare ottenere e regolatore postale metodi in uno:
public ActionResult Index(int? id, string btnActivate)
{
if (!string.IsNullOrEmpty(btnActivate))
{
Activate(id.Value);
return RedirectToAction("NextAction");
}
return View();
}
un po 'tardi alla festa su questo, ma ho trovato una soluzione più semplice a quello che penso sia un caso d'uso abbastanza comune in cui si chiede GET ("sei sicuro di voler blah blah bla?") e poi agire sul POST utilizzando il stesso argomento (s).
La soluzione: utilizzare i parametri opzionali . Non c'è bisogno di campi nascosti e così via.
Nota: l'ho provato solo su MVC3.
public ActionResult ActivateUser(int id)
{
return View();
}
[HttpPost]
public ActionResult ActivateUser(int id, string unusedValue = "")
{
if (FunctionToActivateUserWorked(id))
{
RedirectToAction("NextAction");
}
return View();
}
In una nota finale, non è possibile utilizzare string.Empty al posto di ""
perché deve essere una costante fase di compilazione. Ed è un ottimo posto per mettere commenti divertenti per qualcun altro da trovare :)
Il mio approccio non è quello di aggiungere un parametro inutilizzato in quanto sembra causare confusione ed è in generale una cattiva pratica. Invece, quello che faccio è aggiungere "Post" al mio nome dell'azione:
public ActionResult UpdateUser(int id)
{
return View();
}
[HttpPost]
public ActionResult UpdateUserPost(int id)
{
// Do work here
RedirectToAction("ViewCustomer", new { customerID : id });
}
Usa [ActionName] attributo - in questo modo è possibile avere gli URL apparentemente puntare alla stessa posizione, ma eseguire azioni diverse a seconda del metodo HTTP :
[ActionName("Index"), HttpGet]
public ActionResult IndexGet(int id) { ... }
[ActionName("Index"), HttpPost]
public ActionResult IndexPost(int id) { ... }
in alternativa, è possibile controllare il metodo HTTP in codice:
public ActionResult Index(int id)
{
if (string.Equals(this.HttpContext.Request.HttpMethod, "POST", StringComparison.OrdinalIgnoreCase))
{ ... }
}
- 1. Comprensione dei parametri [HttpPost], [HttpGet] e Complex Actionmethod in MVC
- 2. http_build_query con gli stessi parametri nome
- 3. Passo un parametro in un Tornado HttpGet con diversi parametri
- 4. asp.net mvc - [HttpPost/HttpGet] vs. [AcceptVerbs (HttpVerbs.Post/Get)]
- 5. Sedano: limite di velocità sulle attività con gli stessi parametri
- 6. ASP.NET MVC 3: Come forzare un ActionLink a fare un HttpPost invece di un HttpGet?
- 7. Routing alle azioni con gli stessi nomi, ma diversi parametri
- 8. Come posso creare un UIColor da RGBA?
- 9. httpget richiesta con autenticazione
- 10. Come creare un servizio Windows con parametri?
- 11. Groovy: stessi parametri, risultati diversi
- 12. Come posso unire sottoserie consecutive che contengono gli stessi dati?
- 13. Visualizzazioni con gli stessi ID che ottengono gli stessi attrs al momento del ripristino
- 14. Confrontando gli URL con parametri in Java
- 15. Come si refactoring due classi con gli stessi eventi duplicati?
- 16. Dove posso testare il mio metodo httpPost?
- 17. Come inviare un cookie con HttpGet in Java
- 18. Come creare un servizio Web Restful con parametri di input?
- 19. Come eseguire gli stessi test su server diversi usando prove?
- 20. Come unire due dizionari con gli stessi nomi di chiavi
- 21. Più interfacce con gli stessi nomi di metodo
- 22. Utilizzare HttpGet con caratteri non validi nell'URL
- 23. Come posso confrontare due array con gli stessi elementi o non in groovy?
- 24. Gli utenti 'Utente' @ '%' e 'Utente' @ 'localhost' non sono gli stessi?
- 25. Come creare un oggetto Parametri globali
- 26. Come creare SqlParameterCollection con più parametri?
- 27. Come posso creare parametri SQL generici in .NET?
- 28. Come posso creare un helper con blocco?
- 29. Come creare API REST con parametri facoltativi?
- 30. Come chiamare una funzione definita in C# con gli stessi parametri, tipo restituito e stesso nome ma in casi diversi da un progetto VB.NET
ma non posso avere httpost e httpget con gli stessi paramets, si può mostrare il campione per cs troppo? – waldecir
@waldecir, no, non è possibile avere due azioni del controllore con gli stessi argomenti. Dovrai modificare le firme dell'azione GET o POST. –
Sì, lo so. la mia prima pagina è un get con id per mostrare le informazioni sull'utente, quindi ho bisogno di un post per attivare/disattivare, come sarebbe la chiamata httppost? – waldecir