该项目是一个计算器,只有一个按钮和一个用于表达式和输出的标签字段。
按下任何按钮后,将出现对两个功能之一的POST。这是控制器
public class CalculatorController : Controller
{
public IActionResult Index()
{
return View();
}
[HttpPost]
public IActionResult AddToExpresion(string _char, CalculatorViewModel CVM)
{
CVM.Expression += _char;
return View("Index", CVM);
}
}
这是视图
@model WebApplication1.Models.CalculatorViewModel
@{
ViewData["Title"] = "Calculator";
}
<h2>Calculator</h2>
<form asp-controller="Calculator" asp-action="Calculate" method="post">
<div class="container-fluid">
<div class="row">
<div class="col-md-3">
<label asp-for="Expression">@Html.DisplayFor(x => x.Expression)</label>
<input asp-for="Expression" type="hidden" />
</div>
</div>
<div class="row">
<button type="submit" class="btn" asp-action="AddToExpresion" asp-route-_char="(">
(
</button>
<button type="submit" class="btn" asp-action="AddToExpresion" asp-route-_char=")" >
)
</button>
<button type="submit" class="btn" asp-action="AddToExpresion" asp-route-_char="%">
%
</button>
<button type="button" class="btn" value="AC">
AC
</button>
</div>
..
</div>
</form>
问题是,当调用AddToExpression时,一开始表达式是空的(正确地说是这样),然后在第二次尝试之后仍然是空的(应该是前一个字符),为什么呢?
发布于 2018-10-16 04:41:03
如果没有绑定到输入,则不会将值与表单一起提交。因此,如果您需要保留以前提交的字符,则需要在表单中添加输入。不熟悉新的helper语法,但这应该可以工作:
<div class="col-md-3">
<label asp-for="Expression">@Html.DisplayFor(x => x.Expression)</label>
<input asp-for="Expression" type="hidden" />
</div>
https://stackoverflow.com/questions/52824306
复制相似问题