Нулевое значение в модели просмотра после действия публикации - PullRequest
0 голосов
/ 21 июня 2020

Я получаю нулевые значения в части HTTP-сообщения контроллера из модели представления. Все значения равны нулю. Я не могу получить доступ к свойствам модели представления и также выбрать значения списка. Как решить нулевые значения и получить доступ к выбранному городу из модели для обновления базы данных с использованием контекста базы данных.

Я искал другие похожие вопросы, но эти результаты не помогли.

Это будет здорово помогите, если кто-нибудь может решить проблему.

Класс модели:

namespace MvcCoreAngular.ViewModels
{
    public class DetailedResultEdit
    {
        public int employeeid { get; set; }
        public string name { get; set; }
        public List<SelectListItem> citieslist { get; set; }
        public int cityid { get; set; }
        public string department { get; set; }
        public string gender { get; set; }

    }

}

HTML:

@model IEnumerable<MvcCoreAngular.ViewModels.DetailedResultEdit>
@{
    ViewData["Title"] = "Edit";
}

<h2>Edit</h2>

@using (Html.BeginForm("Edit", "Home", FormMethod.Post))
{

    @foreach (var item in Model)
    {
        <table>
            <tr>
                @Html.Label("Name")
                @Html.TextBoxFor(model => item.name)
                <br />
            </tr>
            <tr>
                @Html.Label("Department")
                @Html.TextBoxFor(model => item.department)
                <br />
            </tr>
            <tr>
                @Html.Label("Cities")
                @Html.DropDownListFor(model => item.cityid, item.citieslist, "", null)
                <br />
            </tr>
            <tr>
             <input type="submit" value="Submit" id="btnSubmit" /> 
            </tr>
        </table>
    }
        
}


Контроллер:

[HttpPost]
        [ValidateAntiForgeryToken]
        public IActionResult Edit(DetailedResultEdit mo)
        {

            //IEnumerable<tblcities> citieslist = from c in _context.tblcities.ToList<tblcities>().GroupBy(x=> x.cityname).Select(x=> x.First());
            if (ModelState.IsValid) {
                
                    var empdata = _context.tblemployee.Find(mo.employeeid);
                    empdata.cityid = mo.cityid;
                    empdata.department = mo.department;
                    empdata.name = mo.name;
                    _context.SaveChanges();

              
            }

1 Ответ

0 голосов
/ 22 июня 2020

Во-первых, ваш код неправильно связывает данные, поэтому действие редактирования не может получить данные. Кроме того, вы не передали employeeid действию, поэтому вы можете добавить скрытый ввод в представление, а затем вы можете использовать _context.tblemployee.Find.

Вот демонстрация:

Контроллер:

[HttpGet]
        public IActionResult Edit() {
            List<tblemployee> tblemployees = _context.tblemployee.ToList();
            List<DetailedResultEdit> detailedResultEdits = new List<DetailedResultEdit>();
            List<SelectListItem> list = new List<SelectListItem> { new SelectListItem { Text = "NY", Value = "1" }, new SelectListItem { Text = "Boston", Value = "2" }, new SelectListItem { Text = "Dover", Value = "3" } };
            foreach (tblemployee t in tblemployees) {
                DetailedResultEdit temp = new DetailedResultEdit();
                temp.cityid = t.cityid;
                temp.name = t.name;
                temp.employeeid = t.employeeid;
                temp.department = t.department;
                temp.gender = t.gender;
                temp.citieslist = list;
                detailedResultEdits.Add(temp);
            }
            return View(detailedResultEdits);
        }
        [HttpPost]
        [ValidateAntiForgeryToken]
        public IActionResult Edit(DetailedResultEdit mo)
        {

            if (ModelState.IsValid)
            {
                var empdata = _context.tblemployee.Find(mo.employeeid);
                empdata.cityid = mo.cityid;
                empdata.department = mo.department;
                empdata.name = mo.name;
                _context.Attach(empdata).State = EntityState.Modified;
                _context.SaveChanges();

                Edit();


            }
            return View();
        }

Просмотр:

@model IEnumerable<DetailedResultEdit>
@{
    ViewData["Title"] = "Edit";
}

<h2>Edit</h2>


@foreach (var item in Model)
{
    @using (Html.BeginForm("Edit", "TestDB", FormMethod.Post))
    {

        <table>
            <tr>
                <input hidden name="employeeid" value="@item.employeeid" class="form-control" />
                @Html.Label("Name")
                <input name="name" value="@item.name" class="form-control" />
                <br />
            </tr>
            <tr>
                @Html.Label("Department")
                <input name="department" value="@item.department" class="form-control" />
                <br />
            </tr>
            <tr>
                @Html.Label("Cities")
                <select name="cityid"
                        asp-for="@item.cityid"
                        asp-items="@item.citieslist">
                </select>
                <br />
            </tr>
            <tr>
                <input type="submit" value="Submit" id="btnSubmit" />
            </tr>
        </table>
    }

}

tblemployee:

public class tblemployee
{
    [Key]
    public int employeeid { get; set; }
    public string name { get; set; }
    public int cityid { get; set; }
    public string department { get; set; }
    public string gender { get; set; }
}

результат: введите описание изображения здесь

...