2014-10-14 5 views
13

Mam metodę SendMail w kontrolerze MVC. Ta metoda wywołuje inną metodę ValidateLogin. Jest podpis Zatwierdzanie Login:Jak zwrócić ActionResult z określonym View (nie nazwą kontrolera)

private ActionResult ValidateLogin(Models.ResetPassword model) 

Kiedy wezwać ValidateLogin z Sendmail wyjątek ten pojawia się, ponieważ kontroler spróbuj wyszukać widok Sendmail, ale chcę, aby załadować ResetPassword Widok:

Global Error - The view 'SendMail' or its master was not found or no view engine supports the searched locations. The following locations were searched: ... 

jest to kod sendMail:

public ActionResult SendMail(string login) 
{ 
     return ValidateLogin(login); 
} 

Jak mogę przesłonić widok na rachunku zamian?

góry dzięki

Odpowiedz

4

w końcu to było rozwiązanie

return View("ResetPassword", new ResetPassword 
      { 
       fields= fields 
      }); 
+0

To tylko mały dodatek: Będzie to wymagało zlokalizowania "ResetPassword.cshtml" w katalogu "~/Views/ /". Gdzie równa się tylko nazwie dostępnej klasy kontrolera; jak na przykład: TestController >> "~/Views/Test/ResetPassword, cshtml" będzie dostępny do ładowania. Nie walcz tutaj, jeśli nie dostaniesz żadnych treści do załadowania. ;) – SiL3NC3

7

Sposób View ma przeciążenia, które uzyskać ciąg do viewName. Czasami chcesz przekazać string jako model, a struktura asp.net myli próbując znaleźć widok o wartości string. Spróbuj czegoś takiego:

public ActionResult SendMail(string login) 
{ 
    this.Model = login; // set the model 
    return View("ValidateLogin"); // reponse the ValidateLogin view 
} 
0

można przeglądać powrócić przez nazwę jak ten

return View("viewnamehere"); 
27
private ActionResult SendMail(string login) 
{ 
      return View("~/Views/SpecificView.cshtml") 
} 

Można bezpośrednio wskazywać w kierunku SZCZEGÓLNE widzenia, wskazując na ich położenie w sposób jawny ..