2016-08-02 2 views
1

Ich benutze die mvc 5 für Lernzwecke. Wenn ich die Daten über den Controller aus der Dropdown-Liste sende, hat das Objekt einen Nullwert im Controller.null wert post auf controller von html helfer dropdown in mvc5

Modell-Code:

namespace Dropdownlist.Models 
    { 
     using System; 
     using System.Collections.Generic; 

     public partial class Country 
     { 
      public int ID { get; set; } 
      public string CountryName { get; set; } 
     } 
    } 

Controller-Code:

namespace Dropdownlist.Controllers 
    { 
     public class HOMEController : Controller 
     { 
      DropDownEntities db = new DropDownEntities(); 
      public ActionResult Index() 
      { 
       return View(); 
      } 
      [HttpPost] 
      public ActionResult Index(Country cn) 
      { 
       db.Countries.Add(cn); 
       db.SaveChanges(); 
       return View(cn); 
      } 
     } 
    } 

Code anzeigen:

@{ 
     ViewBag.Title = "Index"; 
    } 

    <h2>Index</h2> 
    @using (Html.BeginForm(FormMethod.Post)) 
    { 
     <div> 
      @Html.DropDownList("ddlcountry", new List<SelectListItem> 
      { 
       new SelectListItem{ Text = "India", Value = "India"}, 
       new SelectListItem{ Text = "UK", Value = "UK"}, 
       new SelectListItem{ Text = "USA", Value = "USA"} 
      }, "Select a Country") 
     </div> 
     <div> 
      <input type="submit" value="Save" /> 
     </div> 
    } 

Was mache ich falsch?

+0

Haben Sie ID müssen gesetzt werden? – Hamed

+0

Warum sollten Sie die Daten an den Controller senden? –

Antwort

0

Wenn Sie die CountryName Eigenschaft festlegen möchten Ihre Ansicht dazu ändern:

.... 
    @Html.DropDownListFor(x=>x.CountryName, new List<SelectListItem> 
.... 
+0

Dies funktioniert nicht, da die ID nicht gesetzt wird. –

+0

Sie können nicht beide Eigenschaften gleichzeitig einstellen. Ich sehe, dass 'Value' ein String-Typ ist, also denke ich, dass es' CountryName' wäre. – Hamed

+0

Die Aktion sollte eine Zeichenfolge akzeptieren, kein Länderobjekt. –

0

Sie haben hier mehrere Probleme. Das Dropdown hat den Namen "ddlcountry", aber die Aktion erwartet ein Country-Objekt, das keine Eigenschaft von ddlcountry hat. ddlcountry ist ein String Indien/Großbritannien/USA. Das Formular sollte eine ID zurückgeben, die das Querverweis auf eine andere Tabelle enthält. Die Form, wie sie aussieht, macht keinen Sinn, da es nur einen Teil der Daten gibt.

0

Last fallen Sie unten Daten vom Controller

ViewBag.DropDown = db.YourModel.ToList(); 

und dann in der Ansicht

@Html.DropDownList("Name", (IEnumerable<SelectListItem>)ViewBag.DropDown, "Select ...") 
1

Wenn Sie beide ID und CountryName Wert wollen zurück gebucht werden, dann müssen Sie das haben, Steuername entspricht der Eigenschaft Ihres Modells, und Ihre Ansicht sollte stark typisiert sein, so dass Sie Html.DropDownListFor() Helfer verwenden können, jetzt können Sie es tun, wie:

@model Dropdownlist.Models.Country 
@{ 
     ViewBag.Title = "Index"; 
    } 

    <h2>Index</h2> 
    @using (Html.BeginForm(FormMethod.Post)) 
    { 
     <div> 
      @Html.DropDownList("ID", new List<SelectListItem> 
     { 
      new SelectListItem{ Text = "India", Value = 1}, 
      new SelectListItem{ Text = "UK", Value = 2}, 
      new SelectListItem{ Text = "USA", Value = 2} 
     }, "Select a Country",new { id="ddlCountry"}) 

     @Html.Hidden("CountryName") 
     </div> 
     <div> 
      <input type="submit" value="Save" /> 
     </div> 
    } 

und country Sie es in einem versteckten Bereich einstellen müssten und legen Sie es Wert ist, wenn Drop-Down-Index wie geändert wird:

@section Scripts 
{ 

<script type="text/javascript"> 

    $(document).ready(function() { 

     $("#ddlCountry").on("change", function() { 

      $("#CountryName").val($(this).val()); 

     }); 

    }); 
    </script> 

} 
0

Es gibt einige Probleme hier, aber ich denke, dass Ihr nach etwas wie folgt aus:

eine Enumeration für die Auswahlliste Artikel:

public enum Countries 
    { 
     India = 1, 
     UK = 2, 
     USA = 3 
    } 

dann für die Controller-Aktionen:

public ActionResult Index() 
    { 
     ViewBag.Country = Enum.GetValues(typeof(Countries)).Cast<Countries>().ToList().Select(r => new SelectListItem { Text = r.ToString(), Value = ((int)r).ToString() }); 

     return View(); 
    } 

    [HttpPost] 
    public ActionResult Index(Countries country) 
    { 
     var saveit = country; 
     // whatever you wish to do with the result; 
     return Content(saveit.ToString()); 
    } 

The View:

@using(Html.BeginForm("Index", "Home", FormMethod.Post)) 
{ 
    @Html.DropDownList("Country") 
    <button type="submit" >Save</button> 
} 
Verwandte Themen