Получить выбранный элемент в раскрывающемся списке с учетом модели CRUD - PullRequest
0 голосов
/ 06 сентября 2018

Это делается путем добавления вида из моего контроллера и выбора моего dto в качестве шаблона

Мой DTO

public class Company_DTO
{
    public long ID_Company { get; set; }
    public string ESTATE_Company { get; set; }
}

MyController

public ActionResult UpdateCompany()
{


     ViewBag.ListOfCompanies = DependencyFactory.Resolve<ICompanyBusiness>().GetCompany(); // this return a List<int> and following what I read for viewbag this should be right.
        return View();
    }
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult UpdateCompany([Bind]Company_DTO company_DTO)
        {
            try
            {
                //code    
            }
            catch
            {
                return View();
            }
        }

View

    <div class="form-group">            
        @Html.DropDownListFor(model => model.ID_Company , ViewBag.ListOfCompanies) // Here I get an error on my @Html that my dto does nothave a list.
    </div>

Я хочу, чтобы выбранный элемент был ID_Company, но здесь, похоже, я пытаюсь добавить весь список, когда мне просто нужен выбранный элемент, я не могу найти какую-либо документацию или вопрос, который может решить мою проблему.

Не могу отредактировать DTO.

Спасибо за любую помощь и надеюсь, что я достаточно ясен.

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

рассмотрим следующий пример:

public class HomeController : Controller
{
    private List<SelectListItem> items = new List<SelectListItem>()
    {
        new SelectListItem() { Text = "Zero", Value = "0"},
        new SelectListItem() { Text = "One", Value = "1"},
        new SelectListItem() { Text = "Two", Value = "2"}
    };

    public ActionResult Index()
    {
        ViewBag.Items = items;
        return View(new Boo() { Id = 1, Name = "Boo name"});
    }


}

public class Boo
{
    public int Id { get; set; }
    public string Name { get; set; }
}

the view:
@model WebApi.Controllers.Boo    
@Html.DropDownListFor(x=>x.Id, (IEnumerable<SelectListItem>) ViewBag.Items)

, поэтому ViewBag.ListOfCompanies должен содержать IEnumerable.Каждый SelectListItem имеет свойство Text и Value, вам необходимо назначить ESTATE_Company и ID_Company соответственно.как то так:

var companiesList = //get companies list 
ViewBag.ListOfCompanies = companiesList.Select(x => new SelectListItem() {Text = x.ESTATE_Company, Value = x.ID_Company.ToString()});
....
@Html.DropDownListFor(x=>x.ID_Company, ViewBag.Items as IEnumerable<SelectListItem>)
0 голосов
/ 06 сентября 2018

Это должно решить вашу проблему:

View

<div class="form-group"> 
    @Html.DropDownListFor(model => model.ID_Company, new SelectList(ViewBag.Accounts, "ID_Company", "ESTATE_Company"))
</div>

Предположим, ваш взгляд строго напечатан (@model Company_DTO).

Надеюсь, это поможет

...