2017-10-02 1 views
-1

Ich benutze mvc4. Wie kann ich CuntryName und seine Werte in Dropdown-Liste Land binden?Wie kann ich CountryNames in DropDownListFor binden

public class Country 
{ 
    public int Cnt_Id { get; set; } 
    public string Cnt_Name { get; set; } 
} 

Dies ist meine private Klasse

public class HybridEmployee 
{ 
    public IEnumerable<Country> GetCount { get; set; } 
} 

-Controller

public ActionResult GetCountry() 
{ 
    var x = ObjRepo.GetCountry(); 
    hybrid.GetCount = x; 
    return View(hybrid); 
} 

Index.cshtml

@model Mvc_Application.Models.HybridEmployee 
@using Mvc_Application.Models 
@using (Html.BeginForm("SaveEmp", "Home", FormMethod.Post)) 
{ 
    @Html.DropDownListFor(x=>x.GetCount.FirstOrDefault().Cnt_Id),new SelectList(Model.GetCount,"",""); 
} 
+0

'neue Select (Model.GetCount "Cnt_Id", "Cnt_Name") 'aber Sie haben auch Ihre Klammern falsch, und Sie können nicht verwenden x => x.GetCount.FirstOrDefault(). Cnt_Id' - nicht nur macht es keinen Sinn, es bindet sowieso nichts. Sie brauchen eine Eigenschaft, an die Sie sich binden können, zB 'public int SelectedCountry {get; einstellen; } ' –

+0

@stephen könnte Sie auf eine beliebige Demo verweisen –

+0

Schlagen Sie vor, verweisen Sie den Code in [diese Frage/Antwort] (https://stackoverflow.com/questions/34366305/the-viewdata-item-that-has-the-key -xxx-is-of-type-system-int32-aber-muss-sein-o), um zu verstehen, wie man eine Dropdown-Liste erstellt und an diese bindet –

Antwort

2

Wir können zwei Ansätze, wie unten dargestellt:

  1. eine ViewBag enthält die Daten für die Drop-Down-Liste.

Modell-Datei:

public class State 
{ 
    [Key] 
    public int Id { get; set; } 

    [Required] 
    public string Name { get; set; } 

    public int CountryID { get; set; } 
} 

In CS-Datei:

ViewBag.Countries = countryService.All().Select(x => new SelectListItem() { Text = x.Name, Value = x.Id.ToString() }).ToList(); 

In .cshtml Datei:

@Html.DropDownListFor(x => x.CountryID, ViewBag.Countries as IEnumerable<SelectListItem>, "Select Country", new { @class = "form-control" }) 
  1. Verwenden der Eigenschaft eines Models, die die Daten für die Dropdown-Liste enthält.

Modell-Datei:

public class State 
{ 
    [Key] 
    public int Id { get; set; } 

    [Required] 
    public string Name { get; set; } 

    public int CountryID { get; set; } 

    public List<SelectListItem> Countries { get; set; } 
} 

In CS-Datei:

model.Countries = countryService.All().Select(x => new SelectListItem() { Text = x.Name, Value = x.Id.ToString() }).ToList(); 

In .cshtml Datei:

@Html.DropDownListFor(x => x.CountryID, Model.Countries, "Select Country", new { @class = "form-control" }) 
+0

Vielen Dank @Reyan –

+0

Empfehlung mit 'ViewBag' und nicht mit einem View-Modell, das OP bereits hat, ist ein schrecklicher Rat –

+0

Außer dass' int CountryID' und 'IEnumerable Countries' in der' HybridEmployee' Klasse von OP sein sollten (nicht sicher, was Ihre 'State'-Klasse ist - es hat nichts mit der OP-Frage zu tun) –

1

Dieser Ausdruck völlig macht keinen Sinn:

@Html.DropDownListFor(x=>x.GetCount.FirstOrDefault().Cnt_Id),new SelectList(Model.GetCount,"",""); 

Das erste Argument von DropDownListFor Helfern (Expression<Func<TModel, TProperty>> expression) nicht verwenden LINQ Ausdruck, ist es Modell Bindungsausdruck - Sie eine Eigenschaft verwenden, müssen ausgewählten Wert zu halten, statt .Die Drop-Down-Liste Bindung sollte wie folgt verwendet werden:

Modell

public class Country 
{ 
    public int Cnt_Id { get; set; } 
    public string Cnt_Name { get; set; } 
    public int SelectedCountry { get; set; } // additional property to get selected value 
} 

Ansicht

@Html.DropDownListFor(x => x.SelectedCountry, new SelectList(Model.GetCount, "Cnt_Id", "Cnt_Value"), null) 
Verwandte Themen