2014-04-18 11 views
14

ho questo codice:non RedirectToLocal trovato

using Solutionsecurity.web.Models; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using System.Web.Security; 

namespace Solutionsecurity.web.Controllers 
{ 
    public class HomeController : Controller 
    { 


     public ActionResult Login() { 
     return View(new User()); 
     } 

     [HttpPost] 
     [AllowAnonymous] 
     [ValidateAntiForgeryToken] 
     public ActionResult Login(User u, string ReturnUrl) { 

      if (Membership.ValidateUser(u.login, u.password)) 
      { 
       return RedirectToLocal(ReturnUrl); 
      } 
      else { 
       return View(u); 
      } 
     } 

     [Authorize] 
     public ActionResult Common() 
     { 
      return View(); 
     } 
    } 
} 

Non ho idea del perché il RedirectToLocal non viene trovato !!! in questa riga:

return RedirectToLocal(ReturnUrl); 

Qualche idea?

+1

Quale versione di MVC stai utilizzando? – Dismissile

+0

sto usando Asp.net MVC4 –

risposta

26

RedirectToLocal non fa parte del framework. Si aggiunge in alcuni dei modelli MVC nel controller Account:

Questo è preso dal modello MVC5 AccountController:

private ActionResult RedirectToLocal(string returnUrl) 
{ 
    if (Url.IsLocalUrl(returnUrl)) 
    { 
     return Redirect(returnUrl); 
    } 
    else 
    { 
     return RedirectToAction("Index", "Home"); 
    } 
} 

Se volete questo metodo in tutti i controller, allora si potrebbe facilmente aggiungere come metodo protetto in un controller di base e tutti i controller ereditano da quella base:

public abstract class BaseController : Controller 
{ 
    protected ActionResult RedirectToLocal(string returnUrl) 
    { 
     if (Url.IsLocalUrl(returnUrl)) 
     { 
      return Redirect(returnUrl); 
     } 
     else 
     { 
      return RedirectToAction("Index", "Home"); 
     } 
    } 
} 

public class HomeController : BaseController 
{ 
    // ... 
}