2017-02-07 31 views
5

Mam sytuację, w której chcę przekierować/pokazać do jakiegoś adresu/działania, gdy wynik się powiedzie, ale powrócić do widoku, jeśli wystąpił błąd.Asp.Net Core przekierowuje do działania, ale nie pozwala na wywołanie akcji bezpośrednio?

Na przykład gdy someWork return true Chciałbym pokazać „udane” ze strony niektórych danych, ale jeśli jest fałszywe chciałbym wrócić do strony i występów błędów.

Zazwyczaj ChildAction byłby w stanie to zrobić, ale w .NET Rdzenia wydają się być brakuje.

Jaki byłby najlepszy sposób, aby to osiągnąć? Moim głównym zmartwieniem jest to, że trasa/działanie "sukcesu" nie powinny być dostępne bezpośrednio, jeśli ktoś napisze ją na pasku przeglądarki.

+0

Pomimo tego, co myślisz, nie byłbyś w stanie użyć metody "[ChildActionOnly]" w poprzednich wersjach –

Odpowiedz

3

Jednym z rozwiązań (a raczej sposobem obejścia problemu) jest użycie danych tymczasowych do zapisania słowa kluczowego i sprawdzenie go w innej akcji. W ten sposób:

public IActionResult DoSomething() 
{ 
    bool success=someWork(); 
    if(success) 
    { 
     TempData["IsLegit"] = true; 
     return RedirectToAction("Success"); 
    } 
    else 
    { 
     return View(); 
    } 
} 

public IActionResult Success 
{ 
    if((TempData["IsLegit"]??false)!=true) 
     return RedirectToAction("Error"); 
    //Do your stuff 
} 
0

ASP.NET Core ma nową funkcję View Components. Zobacz komponenty składa się z dwóch części, klasy i wyniku (zazwyczaj widok brzytwy). Składniki widoku nie są osiągalne bezpośrednio jako punkt końcowy HTTP, są wywoływane z kodu (zwykle w widoku). Można je również wywoływać z kontrolera, który najlepiej odpowiada Twoim potrzebom. Utwórz widok maszynki do wiadomości sukces

<h3> Success Message <h3> 
Your Success Message... 

Tworzenie odpowiedniego składnika widok

public class SuccessViewComponent : ViewComponent 
{ 
    public async Task<IViewComponentResult> InvokeAsync() 
    { 
     return View(); 
    } 
} 

zauważyć, że nazwa widok i nazwa składnika widok i ścieżki do tych plików przestrzegać konwencji bardzo podobny do kontroler i widoki. Zapoznaj się z podstawową dokumentacją ASP.NET.

Wywołuje składnik widok ze swojego sposobu działania

public IActionResult DoSomething() 
{ 
    bool success=someWork(); 
    if(success) 
    { 
     return ViewComponent("Success"); 
    } 
    else 
    { 
     return View(); 
    } 
} 
0

Można po prostu sprawiają, że działanie prywatne.

public IActionResult DoSomething() 
{ 
    bool success = someWork(); 
    if (success) 
    { 
     // goto some action but not allow that action to be called directly 
     return MyCrazySecretAction(); 
    } 
    else 
    { 
     return View(); 
    } 
} 

private IActionResult MyCrazySecretAction() 
{ 
    return View(); 
}