2010-12-11 9 views
1

Ich habe ein Problem im MVC ASP.NET-Projekt. ich arbeite mit LINQ technology.When Ich möchte einen Datensatz-Tabelle einzufügen, wird dieser Fehler shown.although Einsatz Aktion vorgeformten: **Fehler beim Ausführen der Indexaktion

ERROR:

Server Error in '/' Application. The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult Index(Int32)' in 'MVCJahan_oil.Controllers.getehController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter. Parameter name: parameters Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Controller-Methoden für Einsatz (erstellen) :

public ActionResult Index(int id) 
{ 
    var query= from gete in l_class.getehs where gete.request_no == id select gete; 
    this.Session["req_no"] = id; 
    return View(query.ToList()); 
} 


[HttpPost] 
public ActionResult Create([Bind(Exclude = "id")]geteh gte) 
{ 
    try 
    { 

     l_class.getehs.InsertOnSubmit(gte); 
     l_class.SubmitChanges(); 
     return RedirectToAction("Index", new { id = System.Convert.ToInt32 (Session["req_no"].ToString()) }); 
    } 
    catch 
    { 
     return View(); 
    } 
} 
+0

Sie könnten Ihren Fragetitel aktualisieren möchten, um ein wenig anschaulicher zu sein ... – James

Antwort

0

Das Problem liegt wahrscheinlich in der Controller-Methode, die aufgerufen wird, nachdem das Einfügen durchgeführt wurde. Die Methode erwartet einen int id-Parameter, aber die Weiterleitung, die an die Methode weitergeleitet wird, übergibt keinen ID-Wert.

2

Ihr Controller erwartet eine int namens id, und nicht machtlos. Wenn die Ganzzahl Nullwerte enthalten kann, sollten Sie stattdessen einen int?-Parameter verwenden.

Statt

public ActionResult Index(int id) { 
} 

sollten Sie

public ActionResult Index(int? id) { 
} 

stattdessen verwenden.

Wenn die ID vorhanden sein sollte und Sie ein PRG-Muster verwenden, achten Sie darauf, die ID beim Umleiten nach der Formularübermittlung anzugeben, indem Sie return RedirectToAction("Index", new { id = 1 }); verwenden (ersetzen Sie nur die 1 durch den tatsächlichen Wert).

+0

Vielen Dank. aber mein Problem ist nicht gelöst. bitte antworten Sie mir mit Aufmerksamkeit auf Änderungen in meiner Frage. – Bahareh

+0

Um nur das hinzuzufügen, das Problem, das Sie haben, ist Ihre * Index * -Methode erfordert einen nicht nullbaren Parameter (ID) und Sie setzen es nicht als @ Jarret richtig hingewiesen. Wenn Sie zu der URL z.B. MySite/MyController ruft die Aktion Index in MyController auf, was in Ihrem Fall die obige Ausnahme wäre, weil ** ein ganzzahliger Parameter ** erfordert. Sie müssen entweder a) Ihren ID-Parameter in der Index-Aktion so ändern, dass er nullfähig ist, oder b) immer eine ID in der URL z. MySite/MyController/MyID – James

+0

danke.Aber was muss genau gemacht werden? – Bahareh

1

Try this:

RedirectToAction(new {controller="Home", action="Index", id=123}); 

Ersetzen Sie den Controller, Aktion und id selbst. Wenn der Fehler weiterhin auftritt, überprüfen Sie bitte den Wert Ihrer Sitzung.