c# - 如何自动将值传递给我的控制器
问题描述
所以我正在做一个模拟银行业务的项目。我正在尝试设置提款,但不知道如何将帐户 ID 自动传递给控制器,其中包含要提款的金额。我不断收到一个错误,它说金额有一个空条目,这意味着他们将金额作为 id 变量。
控制器
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Withdraw([Bind(Include = "balance")] int id, decimal amount)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
bankAccount bankAccount = db.Accounts.Find(id);
if (bankAccount == null)
{
return HttpNotFound();
}
if (bankAccount.type)
{
bankAccount.withdraw(amount);
}
else
{
if (amount > bankAccount.balance)
{
ModelState.AddModelError("Amount", "Checking accounts can't be overdraft.");
return View(bankAccount);
}
else
{
bankAccount.withdraw(amount);
}
}
if (ModelState.IsValid)
{
db.Entry(bankAccount).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Details", new { id = bankAccount.customerID });
}
return View(bankAccount);
}
看法
@model BankProject.bankAccount
@{
ViewBag.Title = "Withdraw";
}
<h2>Withdraw</h2>
@using (Html.BeginForm("Withdraw", "bankAccounts", FormMethod.Post))
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>bankAccount</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.accountID)
<div class="form-group">
Remaining Balance: @Html.DisplayFor(model => model.balance) <br />
Withdraw amount: <input type="number" name="out" id="moneyW" />
<br />
<input type="submit" value="Withdraw" />
</div>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
解决方案
你有几个问题。
首先,您使用的是不为balance
. 所有发送到服务器的数据都必须有一个input
可以被浏览器发回的关联元素。Html.DisplayFor()
不渲染input
元素。Html.EditorFor()
可以,但如果您不希望用户编辑 UI 中的值,则不合适。在这种情况下,您必须提供一个隐藏字段。
其次,您在操作中使用[Bind(Include = "balance")]
了id
参数Withdraw
。这将阻止您将正确的值绑定到id
.
最后,@Html.HiddenFor(model => model.accountID)
渲染一个名称为 的输入元素accountID
。为了使值在您的操作中正确绑定在一起,它们必须具有相同的名称(或具有用于绑定复杂模型的正确前缀)。在您的情况下,这意味着将您的操作签名更改为:
Withdraw(int acccountID, decimal balance)
这样做,以及添加@Html.HiddenFor(model => model.balance)
您的视图,应该可以解决您的问题。
此时,如果这对您有效,请尝试将操作中的参数更改为[Bind(Include = "balance")] decimal amount
,这样您就可以获得所需的参数名称amount
。
推荐阅读
- laravel - Laravel:如何使用模型运行之外的数据创建 groupBy 并使用 where claus
- python - 根据 lambda 函数将 NumPy 整数列表值映射到列表
- vue.js - 无法即时更改过渡组的过渡
- java - 将密钥标识符作为 X509SubjectKeyIdentifier 签名失败的 SOAP XML WS-Security
- django - Django 使用略有不同的模板发送邮件
- encoding - 用于编码“UTF8”的无效字节序列:当我尝试使用 FormData 对象向服务器发布和图像时出现 0x00 响应
- c# - 命名空间“Microsoft”中不存在类型或命名空间名称“AspNetCore”(您是否缺少程序集引用?)
- python - 输入一次而不是多次询问
- build - 编译 grpc 错误 zlib_compress 和 zlib_decompress
- java - 在 Spring Boot 中为控制器访问服务添加什么 bean?