2016-07-12 8 views
-7

Hallo, ich bin neu in C# und könnte mit jemandes Hilfe tun, um herauszufinden, was das Problem hier ist. Ich bekomme immer wieder einen Fehler, der besagt, dass unter der Zeile '_parcelService' unten kein erreichbarer Code gefunden wurde.Nicht erreichbarer Code erkannt C# Anfänger

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using ABC.Data; 
using ABC.Services; 
using ABC.Services.Service; 
namespace ABC.Controllers 
{ 
    public class AdminController : Controller 
    { 
     private ParcelService _parcelService; 
     public AdminController() 
     { 
      _parcelService = new ParcelService(); 
     } 

     // GET: Admin 
     public ActionResult Index() 
     { 
      return View(); 
     } 

     [HttpGet] 
     public ActionResult AddParcel() 
     { 
      return View(); 
     } 
     [HttpPost] 
     public ActionResult AddParcel(ParcelDetail parcel) 
     { 
      return View(); 

      { 
       _parcelService.AddParcel(parcel); 

       return RedirectToAction("Parcels", 
        new { TrackingID = parcel.TrackingID, controller = "Parcel" }); 
      } 
     } 

    } 
} 
+9

... weil das Verfahren wird in der Zeile 'Rückkehr beenden Ansicht(); '. Der gesamte Code nach dieser Zeile kann niemals ausgeführt werden. – sstan

Antwort

4

Auf dieser Linie zurück Sie bereits ein Ergebnis aus der Aktion:

return View(); 

Es nichts nach einer Anweisung generiert werden können, die von einer Funktion zurückgibt. So erhalten nur diese Linie los:

[HttpPost] 
public ActionResult AddParcel(ParcelDetail parcel) 
{ 
    _parcelService.AddParcel(parcel); 

    return RedirectToAction("Parcels", 
     new { TrackingID = parcel.TrackingID, controller = "Parcel" }); 
} 

Oder vielleicht wollen Sie eine gewisse Logik anwenden, die die gleiche Ansicht, wenn die Validierung des Modells wieder machen würden fehlschlägt und sonst auf Ihren Backend-Service anrufen würde und umleiten:

[HttpPost] 
public ActionResult AddParcel(ParcelDetail parcel) 
{ 
    if (!ModelState.IsValid) 
    { 
     // The model that was passed to this action was not valid 
     // => Redisplay the same view so that the user can correct 
     // the errors 
     return View(); 
    } 

    // At this stage we know that the model is valid and we can submit it 
    // for processing 
    _parcelService.AddParcel(parcel); 

    // redirect to a different action by returning the corresponding result 
    return RedirectToAction(
     "Parcels", 
     new { TrackingID = parcel.TrackingID, controller = "Parcel" } 
    ); 
} 
+0

Vielen Dank! – user3116358

0

Der Fehler, den Sie erhalten, ist selbst erklärend. Unter

return View() 

geben Sie eine Ansicht zurück. Daher ist jeder nachfolgende Code nicht erreichbar. Ich denke, dass die richtige Version des Codes ist folgende:

[HttpPost] 
public ActionResult AddParcel(ParcelDetail parcel) 
{ 
    // Here you add the parcel 
    _parcelService.AddParcel(parcel); 

    // Then you make a redirect to a view that are visible all the parcels. 
    return RedirectToAction("Parcels", 
    new 
    { 
     TrackingID = parcel.TrackingID, 
     controller = "Parcel" 
    }); 
} 

Es wäre gut, bevor Sie die AddParcel rufen einige Validierungen zu erzwingen, wie wenn Sie das Objekt gültig ist (überprüfen Darin'n Antwort). Vorausgesetzt, dass der parcel Sie POST diese Validierungen besteht, sollten Sie AddParcel aufrufen. Andernfalls sollten Sie das falsche Objekt, das sie gepostet hat, an den Client zurückgeben und erklären, warum es falsch ist.

+0

@Downvoter Ich würde schätzen, wenn Sie darauf hinweisen könnten, was mit der obigen Antwort falsch ist, und ich verspreche, dass ich es korrigieren werde, wenn es kleiner Fehler ist, oder ich es löschen werde, wenn es völlig falsch ist. – Christos

+0

Ich kann nichts falsch mit Ihrem Code finden .. IDK, warum der DownVote angewendet wurde ... so werde ich es wieder normal bringen –

0
return View(); // problem here 

{ 
_parcelService.AddParcel(parcel); 

return RedirectToAction("Parcels", 
       new { TrackingID = parcel.TrackingID, controller = "Parcel" }); 
} 

Das ist, wo Ihr Problem liegt. Sie kehren zurück, bevor Ihre Logik (Code) jemals getroffen wird. Auch Sie haben 2 kehrt ...

Also, da Sie eine return RedirectToAction haben, können Sie nur return View()

so die Lösung löschen:

[HttpPost] 
    public ActionResult AddParcel(ParcelDetail parcel) 
    { 
     // return View(); or just delete it.. since there is really no point to keep it commented out. 

     { 
      _parcelService.AddParcel(parcel); 

      return RedirectToAction("Parcels", 
       new { TrackingID = parcel.TrackingID, controller = "Parcel" }); 
     } 
    }