Mam kontroler, aby wyświetlić model (użytkownika) i chcę utworzyć ekran za pomocą przycisku, aby aktywować. Nie chcę pól w formularzu. Mam już identyfikator w adresie URL. Jak mogę to zrobić?Jak utworzyć httppost uzyskujący te same parametry z httpget?
Odpowiedz
Można użyć ukrytego pola wewnątrz postaci:
<% using (Html.BeginForm()) { %>
<%= Html.HiddenFor(x => x.Id) %>
<input type="submit" value="OK" />
<% } %>
lub przekazać je w działaniu w postaci:
<% using (Html.BeginForm("index", "home",
new { id = RouteData.Values["id"] }, FormMethod.Post)) { %>
<input type="submit" value="OK" />
<% } %>
najłatwiej takiej prostej sytuacji jest nadanie nazwy przesłać przycisk i sprawdzić w działaniu, czy ma wartość, czy nie. Jeśli ma wartość, to zadaj działania, jeśli nie, to Get działanie:
<% using (Html.BeginForm("index", "home",
new { id = RouteData.Values["id"] }, FormMethod.Post)) { %>
<input type="submit" value="OK" name="btnActivate" />
<% } %>
do CS można połączyć GET i kontrolera po metody w jednym:
public ActionResult Index(int? id, string btnActivate)
{
if (!string.IsNullOrEmpty(btnActivate))
{
Activate(id.Value);
return RedirectToAction("NextAction");
}
return View();
}
Trochę późno na imprezę, ale znalazłem łatwiejsze rozwiązanie tego, co uważam za dość powszechny przypadek użycia, w którym pytasz GET ("czy na pewno chcesz bla bla bla??"), a następnie działać na POST za pomocą ten sam argument (y).
Rozwiązanie: użyj opcjonalnych parametrów. Nie ma żadnych ukrytych pól i takich.
Uwaga: testowałem to tylko w MVC3.
public ActionResult ActivateUser(int id)
{
return View();
}
[HttpPost]
public ActionResult ActivateUser(int id, string unusedValue = "")
{
if (FunctionToActivateUserWorked(id))
{
RedirectToAction("NextAction");
}
return View();
}
Na koniec dodam, że nie można używać string.Empty zamiast ""
ponieważ musi być stałą czasu kompilacji. I jest to świetne miejsce na umieszczanie zabawnych komentarzy dla kogoś innego :)
Moje podejście nie polega na dodaniu nieużywanego parametru, ponieważ wydaje się, że spowodowałoby to zamieszanie i jest ogólnie złym zwyczajem. Zamiast tego, co mogę zrobić, to dołączyć „post” do mojego imienia Działanie:
public ActionResult UpdateUser(int id)
{
return View();
}
[HttpPost]
public ActionResult UpdateUserPost(int id)
{
// Do work here
RedirectToAction("ViewCustomer", new { customerID : id });
}
Użyj [ActionName] atrybut - w ten sposób można mieć adresy URL pozornie wskazywać na tym samym miejscu, ale wykonywać różne czynności w zależności od metody HTTP :
[ActionName("Index"), HttpGet]
public ActionResult IndexGet(int id) { ... }
[ActionName("Index"), HttpPost]
public ActionResult IndexPost(int id) { ... }
Alternatywnie można sprawdzić metodę HTTP w kodzie:
public ActionResult Index(int id)
{
if (string.Equals(this.HttpContext.Request.HttpMethod, "POST", StringComparison.OrdinalIgnoreCase))
{ ... }
}
- 1. Groovy: te same parametry, różne wyniki
- 2. Dlaczego cewki indukcyjne muszą mieć te same parametry?
- 3. Te same pola w większości tabel
- 4. Dlaczego czasami bitmapy to te same obiekty?
- 5. Jak odczytać wiele właściwości mających te same klucze na wiosnę?
- 6. Random.Next zwraca zawsze te same wartości.
- 7. ASP.NET MVC 3: Jak zmusić link ActionLink do zrobienia HttpPost zamiast HttpGet?
- 8. połączenie numer kolumny o te same wartości
- 9. Jak uruchomić procesy synchronicznie, kierując na te same dane wyjściowe?
- 10. Jak udostępniać te same dane między wieloma operacjami
- 11. Jak sprawić, by wielu pracowników selera wykonywało te same czynności?
- 12. Python: Jak sprawdzić, czy dwa słowniki mają te same klucze?
- 13. Co to są te parametry GCC/G ++?
- 14. HttpGet prośba o auth
- 15. Scalanie wierszy mających te same wartości w wielu kolumnach
- 16. Jak uruchomić te same testy na różnych serwerach za pomocą funkcji udowodnić?
- 17. Jak zagrupować parametry z kontrolera?
- 18. MySQL porównać te same wartości w kolumnie dwa
- 19. Node.js dla() pętli zwracającej te same wartości w każdej pętli
- 20. Serwer nodejs- socket.io przesyła te same dane wszystkim użytkownikom.
- 21. PHP json_encode jest kodujące te same dane dwukrotnie
- 22. Spraw, aby 2 tabele miały te same rozmiary kolumn.
- 23. AutoMapper - Mapa wykorzystująca te same typy obiektów źródłowych i docelowych
- 24. Zdobądź te same błędy Findbugs w Maven i Eclipse
- 25. SSMS: Wybierając ciąg w skrypcie wyróżnij te same literały
- 26. Czy dokumenty w Lucene muszą zawierać te same pola?
- 27. Android HttpPost: jak uzyskać wynik
- 28. Jak odróżnić parametry zapytań od ścieżki Parametry
- 29. jak wykonać wywołanie httpPost z treścią zakodowaną przez json?
- 30. Przechodząc listę int do HttpGet życzenie
Ale nie mogę mieć httpost i HttpGet z samych paramets można pokazać próbkę do .cs też? – waldecir
@walsządek, nie, nie możesz mieć dwóch akcji kontrolera z tymi samymi argumentami. Będziesz musiał zmodyfikować podpisy akcji GET lub POST. –
Tak, wiem. moja pierwsza strona to get z id, aby wyświetlić informacje o użytkowniku, więc potrzebuję postu do aktywacji/dezaktywacji, jak by było wywołanie httppost? – waldecir