我有这个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>
以及在HomeController
中返回IActionResult
的两种方法:
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;
}
}
为什么当我点击按钮时,post
会给Index(X y Answer)
一个空的Xy()
?也就是说,x
=NaN
而不是@Model.x
,并且y
=null
忽略<input type="number" name="y" step="0.01"/>
字段?
除了最小化代码(这里我给出了最小化代码(;name";用";asp for";以及";asp表单"–这也于事无补。
问题是对字段和属性之间差异的误解。为了使一切正常工作,需要在类中声明的是属性,而不是字段——也就是说,而不是
public float x;
public float? y;
应该是
public float x { get; set; }
public float? y { get; set; }