ASP.NET 核心 MVC <form 方法= "post" >为操作结果提供一个空构造函数



我有这个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; }

相关内容

最新更新