Как отредактировать модель просмотра, содержащую несколько моделей? - PullRequest
0 голосов
/ 08 мая 2020

У меня раньше была рабочая страница редактирования с соответствующим контроллером для этой конкретной тарифной модели.

Но поскольку текущая тарифная модель состоит только из базовой c платы, на странице, похоже, не хватало дополнительной информации .

Поэтому я решил добавить на страницу другие почасовые ставки, чтобы показать больше информации.

Проблема, с которой я столкнулся сейчас, заключается в том, что если бы я поместил ее в одну модель просмотра, я оставил получение null для всех объектов в модели просмотра при отправке.

Я не уверен, правильный ли это подход, или следует сохранить старую модель просмотра и выбросить почасовые ставки в ViewBag или что-то в этом роде. Почасовые ставки только отображаются и вообще не редактируются в этом представлении.

Предыдущий контроллер и представление только что вернули тарифную модель, как и то, что они делают для строительных лесов.

Любые советы о том, как продолжение приветствуется.

Models

    public class TariffViewModel
    {
        public tariff Tariff { get; set; }
        public IList<hourly_tariff> HourlyRates { get; set; }
    }

    public class tariff
    {
        public int Id { get; set; }
        public string TariffCode { get; set; }
        public decimal BasicCharge { get; set; }
    }

    public class hourly_tariff
    {
        public int Id { get; set; }
        public string TariffCode { get; set; }
        public decimal BasicCharge { get; set; }
        public System.TimeSpan StartTime { get; set; }
        public System.TimeSpan EndTime { get; set; }
        public decimal HourlyRate { get; set; }
    }
Controllers

        // GET: Tariffs/Edit/5
        public async Task<ActionResult> Edit(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            tariff tariff = await db.tariffs.FindAsync(id);
            if (tariff == null)
            {
                return HttpNotFound();
            }
            TariffViewModel model = new TariffViewModel()
            {
                Tariff = tariff,
                HourlyRates = db.hourly_rates.Where(h => h.TariffId == id).ToList()
            };
            return View(model);
        }

        // POST: Tariffs/Edit/5
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
        // more details see https://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<ActionResult> Edit(TariffViewModel tariff)
        {
            if (ModelState.IsValid)
            {
                db.Entry(tariff.Tariff).State = EntityState.Modified;

                await db.SaveChangesAsync();
                return RedirectToAction("Index");
            }

            return View(tariff);
        }
Views

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()

<div>
    <h4>tariff</h4>
    <hr />
    @Html.ValidationSummary(true, "", new { @class = "text-danger" })
    @Html.HiddenFor(model => model.Tariff.Id)

    <div class="form-group row">
        @Html.LabelFor(model => model.Tariff.TariffCode, htmlAttributes: new { @class = "col-form-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.Tariff.TariffCode, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.Tariff.TariffCode, "", new { @class = "text-danger" })
            <small class="form-text text-muted">Code to represent this level of tariffs.</small>
        </div>
    </div>

    <div class="form-group row">
        @Html.LabelFor(model => model.Tariff.BasicCharge, htmlAttributes: new { @class = "col-form-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.Tariff.BasicCharge, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.Tariff.BasicCharge, "", new { @class = "text-danger" })
        </div>
    </div>

    @Html.HiddenFor(model => model.HourlyRates)

    <div class="form-group row">
        <div class="offset-md-2 col-md-10">
            <input type="submit" value="Save" class="btn btn-secondary" />
        </div>
    </div>
</div>
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...