表格下拉列表

时间:2016-01-07 08:20:03

标签: c# asp.net asp.net-mvc

我正在使用Entity Framework进行Web应用程序并遇到一些我不确定如何解决的问题。它位于具有自动生成表单内容的Create.cshtml文件中。从一开始我在下拉列表中有一个国家的枚举,然后我不得不改为一个类,因为我还需要能够在列表中添加或删除contries。但是下面的替代方案不起作用,我尝试使用DropDownListDropDownListFor,但没有任何进展!我做错了什么?

@Html.EnumDropDownListFor(model => model.Country, htmlAttributes: new { @class = "form-control" })

这是下拉列表的模型:

    public class CountryNames
{
    public int Id { get; set; }
    public string Name { get; set; }
}
编辑:更新的课程(不确定我是以正确的方式完成的吗??)

    public class CountryNames
{
    public int Id { get; set; }
    public int SelectedCountryId { get; set; }
    public IEnumerable<SelectListItem> Countries { get; set; }

    //public string Name { get; set; }
}

编辑:在控制器中创建操作方法

// GET: Persons/Create
    public ActionResult Create()
    {
        var countryNames = new CountryNames();

        countryNames.Countries = CountriesList.Select(x => new SelectListItem { Text = x.Name, Value = x.Id.ToString() });

        return View(countryNames);

        //return View();
    }

2 个答案:

答案 0 :(得分:1)

所以在你的控制器中你会有这样的东西:

[HttpGet]
public ActionResult SomeAction()
{
    var vm = new SomeViewModel();

    vm.Countries = CountriesList.Select(x => new SelectListItem { Text = x.Name, Value = x.Id.ToString() });

    return View(vm);
}

public class SomeViewModel
{
    public IEnumerable<SelectListItem> Countries {get;set;}

    public int SelectedCountryId {get;set;}
}

CSHTML:

@model some.namespace.path.SomeViewModel

@Html.DropDownListFor(model => model.SelectedCountryId, Model.Countries, new { @class = "form-control" })

总而言之,您将视图模型作为要在视图上显示的对象的容器(cshtml)。 SelectListItem的国家/地区列表,因为这是DropDownList理解的内容。

在控制器中,您SelectCountriesList进行了操作,即CountryNames个对象并将其转换为SelectListItem个。

最后,ViewModel上有一个名为SelectedCountryId的属性,当您选择特定国家/地区时,该属性由下拉列表设置。

供参考:

CountriesList是一个变量,它是某种形式的IEnumerable<CountryNames>,可以从数据库或包含该列表的静态类中检索它。

答案 1 :(得分:0)

只需使用ViewBag即可:

你的控制器应该是

public ActionResult GetCountries()
    {
        ViewBag.Countries = EntitiesObject.CountriesTable.Select(x =&gt; x.Countries).ToList();
        return View();
    }

查看:
@model xyz.Models.exampleModel

@ Html.DropDownListFor(model =&gt; model.Country,new SelectList(ViewBag.Countries),“ - 选择你的国家 - ”,htmlAttributes:new {@class =“form-control”})

在班级/模型中

public class MyModel
    {
        public int Id { get; set; }
        public string Country{ get; set; }
    }