2016-07-12 6 views
-7

Привет, я новичок в C# и мог бы с кем-нибудь помочь узнать, что проблема здесь. Я продолжаю ошибаться, говоря, что недостижимый код был обнаружен в строке «_parcelService» внизу.Недоступный код обнаружен C# beginner

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

... потому что этот метод будет заканчиваться на линии 'возврат View(); '. Весь код после этой строки никогда не будет выполнен. – sstan

ответ

4

На этой линии вы уже возвращал результат действия:

return View(); 

Там не может быть ничего после того, как заявление, что возвращается из функции. Так просто избавиться от этой линии:

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

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

Или может быть, вы хотите применить некоторую логику, которая бы вновь вынести тот же вид, если проверка модели не удается, и в противном случае могли бы назвать к службе бэкэнда и перенаправления:

[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

Спасибо вам большое! – user3116358

0

Ошибка, которую вы получаете, является самостоятельной пояснительной записью. Ниже

return View() 

Вы возвращаете представление. Поэтому каждый код после этого недоступен. Я считаю, что правильная версия кода является следующее:

[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" 
    }); 
} 

Было бы хорошо, прежде чем позвонить в AddParcel для обеспечения некоторых валидаций, как если бы вы возражаете правомочно (проверьте Darin'n ответ). При условии, что parcel вы отправите эти проверки, затем вы должны позвонить AddParcel. В противном случае вы должны вернуть клиенту неправильный объект, который она разместила, и объяснить, почему это неправильно.

+0

@Downvoter Я был бы признателен, если бы вы могли указать, что не так с приведенным выше ответом, и я обещаю, что исправлю его, если это небольшая ошибка или я удалю его, если он полностью ошибается. – Christos

+0

Я не могу найти что-то не так с вашим кодом .. idk, почему применяется downvote ... так что я верну его в нормальное русло –

0
return View(); // problem here 

{ 
_parcelService.AddParcel(parcel); 

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

Вот где ваша проблема. вы возвращаетесь, прежде чем ваша логика (код) когда-либо попадет. Кроме того, у вас есть 2 возвращается ...

Так, так как у вас есть return RedirectToAction вы можете просто удалить return View()

так решение:

[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" }); 
     } 
    } 
Смежные вопросы