2016-12-19 1 views
-1

Ich versuche, den ausgewählten Wert eines Dropdown-Menüs aus der Bearbeitungsansicht an den Controller zu senden. Ich halte die gleichen Fehler "{" Der Wert darf nicht null sein \ r \ nParameter Name:. Artikel "}"Abrufen des Dropdown-Listenwerts in MVC

hier meiner Meinung nach ist:

<div class="form-group"> 
    @Html.LabelFor(model => model.adminID, htmlAttributes: new { @class = "control-label col-md-2" }) 
    <div class="col-md-10"> 
     @Html.DropDownListFor(model => model.adminID, new SelectList(ViewBag.Admins, "Value", "Text"), htmlAttributes: new { @class = "form-control", @name = "admin" }) 
     @Html.ValidationMessageFor(model => model.adminID, "", new { @class = "text-danger" }) 
    </div> 
</div> 

ich die Select in der get Aktion erstellt .

var admins = from a in db.members 
        select new { name = a.student.Fname + " " + a.student.Sname, id = a.StudentID }; 

ViewBag.Admins = admins.Select(a => new SelectListItem 
{ 
    Text = a.name, 
    Value = a.id 
}).ToList(); 

Und hier ist der Controller. Ich habe adminID verwendet, den Namen der Eigenschaft, um es zu versuchen, aber es gibt den Fehler zurück, wenn ich die Seite poste.

public async Task<ActionResult> Edit([Bind(Include = "ClubId,ClubName,CreationDate,adminID")] Club club) 
{ 
    if (ModelState.IsValid) 
    { 
     db.Entry(club).State = EntityState.Modified; 
     await db.SaveChangesAsync(); 
     return RedirectToAction("Index"); 
    } 
    return View(club); 
} 

Der Fehler ist

"{" Wert nicht null sein kann \ r \ nParameter. Name: Artikel "}" zurückgegeben wird

Irgendwelche Ideen, warum wird die adminID nicht speichern/binden? enter image description here

Strecke Config

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Clubs", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
} 
+0

Wie sehen Ihre Routen aus? –

+0

@JesseMoreland, nicht ganz sicher, was du meinst. –

+0

zeigen Sie die Zeile der Ausnahme sowie die Controller-Action-Definition plz – Steve

Antwort

0

Der Name des DropdownListFor muss den gleichen Namen wie Eigenschaft des Objekts haben, sonst Formcollection verwenden, erhalten Wert von Formularinstanz und weisen auf die Eigenschaft

0

Ich denke, dass, da Sie die Dropdownliste als "admin" benennen, MVC beim Zurückschreiben nicht weiß, wo der Wert bleiben soll, weil Sie keinen Wert in den Parametern der post-Methode namens admin haben.

Wenn Sie den @name entfernen, sollte es funktionieren.

@Html.DropDownListFor(model => model.adminID, new SelectList(ViewBag.Admins, "Value", "Text"), htmlAttributes: new { @class = "form-control" }) 

Ein andere Sache, Sie sind in der Steuerung eine neue Auswahlliste erstellen dann in das Bildschirmtextsystem vorbei, so haben Sie eine Auswahlliste in der Ansicht Daten an dieser Stelle. Dann deklarieren Sie in der Ansicht eine andere Auswahlliste, sodass Sie eine Auswahlliste mit Auswahllisten mit einem Element haben.

+0

Ich habe es tatsächlich versucht, wie von jemand anderem vorgeschlagen. Es gibt denselben Fehler zurück. –

+0

Hinzugefügt mehr zur Antwort. –