У меня раньше была рабочая страница редактирования с соответствующим контроллером для этой конкретной тарифной модели.
Но поскольку текущая тарифная модель состоит только из базовой 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>
}