Как передать выбранный идентификатор из DropDownListFor в контроллер в asp.net mvc - PullRequest
0 голосов
/ 18 сентября 2018

Я только новичок, и у меня есть проблема с моим DropDownList: (MVC, ASP.NET)

Сценарий:

В представлении, когда выбран раскрывающийся списокон отображает значение (Имя категории) В контроллере вместо (имя категории) он распознает только присвоенный идентификатор для конкретного значения

Проблема:

, когда этонажмите кнопку Сохранить, возвращаемое значение из выпадающего списка равно NULL, затем в таблице CATEGORY создайте еще одну строку с пустым содержимым. Модель: (Поставщик)

    public class Supplier
    {
        public int Id { get; set; }
        public string SupplierCode { get; set; }
        public string SupplierName { get; set; }
        public int SupplierContact { get; set; }
        public Category Category { get; set; }
    }

Модель: (Категория)

    public class Category
    {
        public int Id { get; set; }
        public string CatName { get; set; }
    }

Контроллер (Поставщик)

        public ActionResult New()
        {
            var CategoryMenu = _SBC.Categorys.ToList();
            var NewContent = new SupplierandCategoryViewModel()
            {
               CategoryModel = CategoryMenu,
            };
            return View(NewContent);
        }

        public ActionResult Save(SupplierandCategoryViewModel Supply)
        {   

            var DSupply = new Supplier()
            {
                SupplierName = Supply.SupplierModel.SupplierName,
                SupplierCode = Supply.SupplierModel.SupplierCode,
                SupplierContact = Supply.SupplierModel.SupplierContact,
                Category = Supply.CategoryModel //this part is error; it cannot 
                recognize
            };

            _SBC.Suppliers.Add(DSupply);
            _SBC.SaveChanges();
            return View();
        }

Просмотр: (Поставщик)

@model ShoeInformation.ViewModel.SupplierandCategoryViewModel
@{
    ViewBag.Title = "New";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<br />
<br />
<h2>Create New Customer</h2>
<br />
<br />
@using (Html.BeginForm("Save", "Supplier"))
{
    <div class="form-group">
        @Html.LabelFor(x=>x.CategoryModel)
        @Html.DropDownListFor(x => x.CategoryModel, new SelectList(Model.CategoryModel,"Id","CatName"), "Select Supplier Category", new {id="myCat",@class="form-control" })
    </div>

     <div class="form-group">
        @Html.LabelFor(x=>x.SupplierModel.SupplierCode)
        @Html.TextBoxFor(x => x.SupplierModel.SupplierCode, new { @class="form-control"})
    </div>
    <div class="form-group">
        @Html.LabelFor(x=>x.SupplierModel.SupplierName)
        @Html.TextBoxFor(x => x.SupplierModel.SupplierName, new { @class="form-control"})
    </div>
    <div class="form-group">
        @Html.LabelFor(x=>x.SupplierModel.SupplierContact)
        @Html.TextBoxFor(x => x.SupplierModel.SupplierContact, new { @class="form-control"})
    </div>

}

ViewModel: (SupplierandCategoryViewModel)

    public class SupplierandCategoryViewModel
    {
        public IEnumerable<Category> CategoryModel { get; set; }
        public Supplier SupplierModel { get; set; }
    }

Я хочу, чтобысохранить идентификатор категории, но в представлении (индекс) должно отображаться значение идентификатора, а не сам идентификатор

Спасибо за ваш ответ !!

1 Ответ

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

1) Добавьте одно SelectedCategory свойство к вашему SupplierandCategoryViewModel

public class SupplierandCategoryViewModel
{
    public IEnumerable<Category> CategoryModel { get; set; }
    public Supplier SupplierModel { get; set; }
    public int SelectedCategory { get; set; }     <== Add this property
}

2) Укажите правильное имя для Id

public class Category
{
    public int CategoryId { get; set; }    <== Change the name
    public string CatName { get; set; }
}

3) Ссылка CategoryId на вашу Supplier модель

public class Supplier
{
    public int Id { get; set; }
    public string SupplierCode { get; set; }
    public string SupplierName { get; set; }
    public int SupplierContact { get; set; }
    public int CategoryId { get; set; }        <== Reference to this property
    public Category Category { get; set; }
}

4) Измените свой DropDownListFor как

@Html.DropDownListFor(x => x.SelectedCategory, new SelectList(Model.CategoryModel, "CategoryId", "CatName"), "Select Supplier Category", new { id = "myCat", @class = "form-control" })

5) Наконец, ваш Save метод действия, такой как

public ActionResult Save(SupplierandCategoryViewModel Supply)
{

    var DSupply = new Supplier()
    {
        SupplierName = Supply.SupplierModel.SupplierName,
        SupplierCode = Supply.SupplierModel.SupplierCode,
        SupplierContact = Supply.SupplierModel.SupplierContact,
        CategoryId = Supply.SelectedCategory                     <==Note here I assigned SelectedCategory to model's CategoryId
    };

    _SBC.Suppliers.Add(DSupply);
    _SBC.SaveChanges();
    return View();
}

Тестовые данные для DropDownList:

var CategoryMenu = new List<Category> { new Category { CategoryId = 1, CatName = "Abc" }, new Category { CategoryId = 2, CatName = "Pqr" } };

Выход:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...