ASP.NET core MVC
Есть Index.cshtml
@{
ViewData["Title"] = "Home Page";
}
@model Xy;
@*...*@
<form method="post">
<input type="hidden" name="x" value="@Model.x" />
<input type="number" name="y" step="0.01"/>
<input type="submit" value="Отправить" class="btn"/>
</form>
И два IActionResult в HomeController:
public IActionResult Index()
{
float x = (float)Round(new Random().NextDouble()*24+1,2);
return View(new Xy(x));
}
[HttpPost]
public IActionResult Index(Xy Answer)
{
//...
}
И, соответственно, сам класс Xy:
public class Xy
{
public float x;
public float? y;
public Xy()
{
x = float.NaN;
y = null;
}
public Xy(float X, float? Y = null)
{
x = X;
y = Y;
}
}
Почему при нажатии на кнопку, в Index(Xy Answer) передаётся пустой Xy()? То есть, с x = NaN и y = null, когда x должен быть равен @Model.x, а y числу в поле <input type="number" name="y" step="0.01"/>?
Кроме минимизации кода (здесь я привёл именно минимизированный код), я пробовал заменить "name" на "asp-for" и "asp-form" – не помогло.
Ответы (1 шт):
Автор решения: Титан
→ Ссылка
Проблема была в непонимании отличия полей от параметров. Чтобы всё работало, в классе нужно объявить именно параметры, а не поля – то есть, вместо
public float x;
public float? y;
должно быть
public float x { get; set; }
public float? y { get; set; }