Передача объекта от представления к контроллеру и от него обратно в представление ASP.NET Core
Мне нужно сделать обработку вводимых данных через передачу объекта с параметрами.
Я сделал передачу из представления в контроллер вводимых данных и затем передачу рассчитанных по этим данным параметров из контроллера в представление с помощью RedirectToAction. Используются 3 представления в первом форма с вводимыми данными, во второй - вывод результата и форма с дополнительными параметрами, в третьем - вывод окончательных результатов. Сейчас у меня работает только передача объекта с параметрами из первого представления в контроллер и вывод результатов и запись дополнительных параметоров во 2-ом представлении.
Контроллер:
public class CalculationController: Controller
{
private readonly ICalculationParameters calculationParameters;
private Parameters pam = new Parameters();
public CalculationController(ICalculationParameters calculationParameters)
{
this.calculationParameters = calculationParameters;
}
public IActionResult CalculationParameters()
{
return View();
}
[HttpPost]
public ActionResult CalculationParameters(Parameters pam, string action)
{
if (ModelState.IsValid)
{
calculationParameters.Calculation(pam);
return RedirectToAction("CalculationSize", pam);
}
return View(pam);
}
public ActionResult CalculationSize(Parameters pam)
{
CalculationOfParameters calPam = new CalculationOfParameters(pam);
this.pam = calPam.parameters;
return View(calPam.parameters);
}
public ActionResult Calculation(Parameters pam)
{
CalculationOfSize calPam = calPam = new CalculationOfSize(pam);
return View(calPam.parameters);
}
}
Представление 1-ое:
@model Parameters
<div class="content">
<table cellpadding="0" cellspacing="0" width="100%">
<div class="block_content">
<form action="CalculationParameters" method="POST">
<table align="center" class="content_fields">
<tbody>
<tr>
<td>
<div class="form-group">
<label>Напряжение питания инвертора</label>
<div class="col-12">
<input asp-for="En" class="form-control" />
<span asp-validation-for="En" class="text-danger"></span>
</div>
</div>
</td>
<td>
<div class="form-group">
<label>Внешняя нагрузка</label>
<div class="col-12">
<input asp-for="Cn" class="form-control" />
<span asp-validation-for="Cn" class="text-danger"></span>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="form-group">
<label>Высокий уровень входного напряжения</label>
<div class="col-12">
<input asp-for="Uvh1" class="form-control" />
<span asp-validation-for="Uvh1" class="text-danger"></span>
</div>
</div>
</td>
<td>
<div class="form-group">
<label>Толщина диэлектрика</label>
<div class="col-12">
<input asp-for="hd" class="form-control" />
<span asp-validation-for="hd" class="text-danger"></span>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="form-group">
<label>Низкий уровень входного напряжения</label>
<div class="col-12">
<input asp-for="Uvh0" class="form-control" />
<span asp-validation-for="Uvh0" class="text-danger"></span>
</div>
</div>
</td>
<td>
<div class="form-group">
<label>Время включения</label>
<div class="col-12">
<input asp-for="t" class="form-control" />
<span asp-validation-for="t" class="text-danger"></span>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="form-group">
<label>Высокий уровень выходного напряжения</label>
<div class="col-12">
<input asp-for="Uvyh1" class="form-control" />
<span asp-validation-for="Uvyh1" class="text-danger"></span>
</div>
</div>
</td>
<td>
<div class="form-group">
<label>Диэлектрическая проницаемость диэлектрика</label>
<div class="col-12">
<input asp-for="Ed" class="form-control" />
<span asp-validation-for="Ed" class="text-danger"></span>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="form-group">
<label>Низкий уровень выходного напряжения</label>
<div class="col-12">
<input asp-for="Uvyh0" class="form-control" />
<span asp-validation-for="Uvyh0" class="text-danger"></span>
</div>
</div>
</td>
<td>
<div class="form-group">
<label>Подвижность электронов</label>
<div class="col-12">
<input asp-for="u" class="form-control" />
<span asp-validation-for="u" class="text-danger"></span>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="form-group">
<label>Пороговое напряжение</label>
<div class="col-12">
<input asp-for="U0" class="form-control" />
<span asp-validation-for="U0" class="text-danger"></span>
</div>
</div>
</td>
<td>
<input class="btn btn-success" type="submit" value="Рассчитать" />
</td>
</tr>
</tbody>
</table>
</form>
</div>
</table>
</div>
Представление 2-ое:
@model Parameters
<h3>Результаты</h3>
<p>
<font>
Отношение крутизны характеристики ключевого МДП транзистора к соответствующей характеристике нагрузочного МДП транзистора Kк / Kн = @Model.K
</font>
</p>
<p>
<font>
Отношение wн / lн для нагрузочного МДП транзистора = @Model.wn_ln
</font>
</p>
<p>
<font>
Отношение wk / lk для ключевого МДП транзистора = @Model.wk_lk
</font>
</p>
<p>
<font>
Введите минимально возможные при данной технологии значения lк и wн
</font>
</p>
<table cellpadding="0" cellspacing="0" width="100%">
<div class="block_content">
<form asp-action="CalculationSize" method="post">
<table align="center" class="content_fields">
<tbody>
<tr>
<td>
<div class="form-group">
<label>Длина ключевого транзистора</label>
<div class="col-12">
<input asp-for="lk" class="form-control" />
<span asp-validation-for="lk" class="text-danger"></span>
</div>
</div>
</td>
<td>
<div class="form-group">
<label>Ширина нагрузочного транзистора</label>
<div class="col-12">
<input asp-for="wn" class="form-control" />
<span asp-validation-for="wn" class="text-danger"></span>
</div>
</div>
</td>
</tr>
<tr>
<td>
<input class="btn btn-success" type="submit" value="Рассчитать" />
</td>
</tr>
</tbody>
</table>
</form>
</div>
</table>
Представление 3-е:
@model Parameters
<p>
<font>
Значения нагрузочного МДП транзистора lн = @Model.ln, wн = @Model.wn
</font>
</p>
<p>
<font>
Значения ключевого МДП транзистора lк = @Model.lk, wк = @Model.wk
</font>
</p>
Мне нужно получить дополнительные значения из 2-го предсталения и провести дополнительный расчет с выводом значений в 3-е представление (вот тут и вся проблема, когда я нажимаю на кнопку, то получаю только дополнительные значения, а старые теряются).
- Как можно передать данные введенные во 2-ом представлении в контроллер и затем в 3-е представление вывести результат?
- И как можно объединить все представления в один? Сейчас думаю сделать с помощью скрытого атрибута и затем по нажатию кнопки показывать их, но встает вопрос как можно передать данные от представления в контроллер и затем от контроллера вернуть результат (рассчитанный по переданным параметрам).