2016-04-18 3 views
0

Ich bin neu beim Stack-Überlauf. Ich habe mit dem Erstellen einer MVC-Anwendung begonnen und anstelle von Map.Route verwende ich ein Bindungsattribut die ID weitergeben. Im Folgenden wird der Fehler und der Code für jede Klasse/Komponente angezeigt.Das Parameterwörterbuch enthält einen Nulleintrag für den Parameter 'restaurantId' vom Typ 'System.Int32

Die Parameter Wörterbuch enthält einen Null-Eintrag für Parameter 'restaurantId' von nicht-NULL festlegbaren Typ 'System.Int32' für Verfahren 'System.Web.Mvc.ActionResult Index (Int32)' in ‚OdeToFood. Controller.ResturantReviewController '. Ein optionaler -Parameter muss ein Referenztyp, ein Nullable-Typ oder ein optionaler Parameter sein.

Modell

public class ResturantReview 
{ 
    public int Id { get; set; } 
    public int Rating { get; set; } 
    public string Body { get; set; } 
    public string ReviewerName { get; set; } 
    public int ResturantId { get; set; } 

} 

Controller 
public class ResturantReviewsController : Controller 
    { 
     private OdeToFoodDb _db = new OdeToFoodDb(); 

     public ActionResult Index([Bind(Prefix = "id")] int restaurantId) 
     { 
      var restaurant = _db.Resturants.Find(restaurantId); 
      if (restaurant != null) 
      { 
       return View(restaurant); 
      } 
      return HttpNotFound(); 
     } 

     [HttpGet] 
     public ActionResult Create(int restaurantId) 
     { 
      return View(); 
     } 

     [HttpPost] 
     public ActionResult Create(ResturantReview review) 
     { 
      if (ModelState.IsValid) 
      { 
       _db.Reviews.Add(review); 
       _db.SaveChanges(); 
       return RedirectToAction("Index", new { id = review.ResturantId }); 
      } 
      return View(review); 
     } 

     protected override void Dispose(bool disposing) 
     { 
      if (disposing) 
      { 
       _db.Dispose(); 
      } 
      base.Dispose(disposing); 
     } 

Ansicht

@model OdeToFood.Models.Resturant 

@{ 
    ViewBag.Title = "Index"; 
} 

<h2>Index</h2> 
@Html.Partial("View", Model.Reviews) 
<p> 
    @Html.ActionLink("Create New", "Create", new { restaurantId = Model.Id }) 
</p> 
+1

Können Sie bitte URL zur Verfügung stellen, in der es fehlschlägt? –

+0

Ihr Parameter hat den Namen 'restaurantId' (nicht 'id'), also sein 'return RedirectToAction (" Index ", new {restaurantId = review.ResturantId});' und entfernen Sie das '[Bind (Prefix =" id "]]' –

Antwort

2

Von dem, was Sie Aktion sehen haben

public ActionResult Index([Bind(Prefix = "id")] int restaurantId) 

Remove Bind-Attribut

public ActionResult Index(int id) 

Bind Präfix bedeutet, dass Sie POST/Get Parameter als id.restaurantId. Und Sie wollen Standardrouting fangen, das Identifikation von der URL liest wie ResturantReviews/Index/2

+0

Hi, das hat den Trick gemacht, aber jetzt bekomme ich einen Fehler: Die Anweisung INSERT steht in Konflikt mit der FOREIGN KEY-Einschränkung "FK_dbo.ResturantReviews_dbo.Resturants_Resturant_Id". Der Konflikt ist in der Datenbank "OdeToFoodDb", Tabelle "dbo.Resturants", Spalte "Id" aufgetreten. Die Anweisung wurde beendet. – user3820867

+0

In meiner Restaurantreview-Modellklasse muss ich [Key] auf ResturantId hinzufügen – user3820867

+0

Sorry Volodymyr hier ist die Url auf der Seite erstellen Ich bekomme jetzt die richtige ID: http: // localhost: 52918/Reviews/Create? RestaurantId = 7 – user3820867

Verwandte Themen