2016-06-03 14 views
1

Ich weiß, wir können RedirectToAction innerhalb einer void Methode nicht verwenden, aber wie kann ich das folgende Szenario umgehen. Bitte beachten Sie die Kommentare, die das Szenario gut erklären.RedirectToAction innerhalb einer Void-Methode

public void CertificateVerification(string regNo) 
{ 
    try 
    { 
     var _dbRegn = _db.StudentRegistrations 
        .Where(r => r.RegistrationNumber == regNo) 
        .FirstOrDefault(); 
     //checking if registration exist 
     if (_dbRegn != null) 
     { 
      var _isCertificateIssued = _dbRegn.IsCertificateIssued.Value; 
      //checking if certificate issued 
      if (_isCertificateIssued) 
      { 
       string FilePath = Server.MapPath("~/Certificates/" + _dbRegn.RegistrationNumber + ".pdf"); ; 
       WebClient User = new WebClient(); 
       Byte[] FileBuffer = User.DownloadData(FilePath); 
       if (FileBuffer != null) 
       { 
        Response.ContentType = "application/pdf"; 
        Response.AddHeader("content-length", FileBuffer.Length.ToString()); 
        Response.BinaryWrite(FileBuffer); 
        Response.End(); 
       } 
      } 
      //if certificate not issued then redirect to specific page 
      else 
      { 
       RedirectToAction("CertificateNotApproved"); 
      } 
     } 
     //if registration dont exist redirect to specific page 
     else 
     { 
      RedirectToAction("CertificateDontExist"); 
     } 
    } 
    catch (Exception ex) 
    { 
     RedirectToAction("CertificateDontExist"); 
    } 
} 

Antwort

2

die Methode Rewrite, so dass es das tut, was Sie

public bool IsCertificateValid(string regNo, string redirectTo) 
{ 
    redirectTo = null; 
    try 
    { 
     var _dbRegn = _db.StudentRegistrations 
        .Where(r => r.RegistrationNumber == regNo) 
        .FirstOrDefault(); 
     if (_dbRegn != null) 
     { 
      var _isCertificateIssued = _dbRegn.IsCertificateIssued.Value; 
      if (_isCertificateIssued) 
      { 
       // unimportant code... 
      } 
      else 
      { 
       redirectTo = "CertificateNotApproved"; 
      } 
     } 
     else 
     { 
      redirectTo = "CertificateDontExist"; 
     } 
    } 
    catch (Exception ex) 
    { 
     redirectTo = "CertificateDontExist"; 
    } 

    return !string.IsNullOrEmpty(redirectTo); 
} 

Nutzung wollen:

string redirectTo; 
if (!IsCertificateValid(regNo, out redirectTo) 
{ 
    return RedirectToAction(redirectTo); 
} 
Verwandte Themen