c# - Html.BeginForm 不返回正确的模型实例
问题描述
我很难弄清楚如何让 Html.BeginForm 返回模型的当前实例而不是新实例。
为了解释什么是错的,当我在 TextBoxFor() 中编写一些东西并单击 html.beginform() 中的提交按钮时,它正确地执行了 AddStatus() 并使用右键将其放置在 statusDict 中并显示在foreach 循环中视图的右侧。然后,当我单击右侧的“fortsæt”按钮时,它会更正将值加载到 TextBoxFor 中,因为我将其默认为 Model.MailTitel。现在我想更改 Model.Mailtitel 中的内容,当我单击提交时,我希望它将此模型的特定实例返回给控制器,但 MailTitel 具有新值,因为这将是模型的实例已经在statusDict,它应该只更新@status.Value.MailTitel。然而,由于 Html.
所以我的问题是:如何让 Html.BeginForm() 返回与控制器给视图相同的模型实例?
代码:
看法:
@using DS_Prototype.Models
<!--Left side - Info filling -->
<div class="split left">
@using (Html.BeginForm("Submit", "Home", FormMethod.Post))
{
@Html.AntiForgeryToken() // helps mitigate against cross-site request forgery
@Html.TextBoxFor(Model => Model.MailTitel, new { @Value = Model.MailTitel })
<button type="submit" class="btn btn-block btn-login">Submit</button>
}
</div>
<!--Right side - Status overview -->
<div class="split right">
@foreach (KeyValuePair<string, DriftStatus> status in (Dictionary<string, DriftStatus>)Session["statusDict"])
{
<div class="card">
<div class="card-body">
@status.Value.MailTitel
<div class="btn-group btn-group-justified">
@Html.ActionLink("Fortsæt", "ContinueStatus", "Home", new { status_id = status.Key }, new { @class = "btn btn-primary" })
@Html.ActionLink("Afslut", "EndStatus", "Home", new { @class = "btn btn-primary" })
</div>
</div>
</div>
}
</div>
控制器:
public ActionResult Submit(DriftStatus driftstatus) {
AddStatus(driftstatus);
ModelState.Clear();
return View("Index", new DriftStatus());
}
public ActionResult ContinueStatus(string status_id)
{
return View("Index",FindStatus(status_id));
}
private DriftStatus FindStatus(string key)
{
Dictionary<string, DriftStatus> statusDict = Check_statusDict();
DriftStatus driftstatus = statusDict[key];
if (driftstatus == null)
{
return new DriftStatus();
}
return statusDict[key];
}
private void AddStatus(DriftStatus driftstatus)
{
Dictionary<string, DriftStatus> statusDict = Check_statusDict();
if (!statusDict.ContainsKey(driftstatus.Created))
{
driftstatus.Created = DateTime.Now.ToString();
statusDict.Add(driftstatus.Created, driftstatus);
}
}
解决方案
推荐阅读
- java - 将大括号问题与 try catch 混淆
- android - 在 Kotlin 中初始化 SharedPreference 的正确方法
- ruby - Ruby 应用程序不再能够访问远程 Heroku Postgres - 在本地安装 Postgres.app 之后
- r - 打印矩阵中值的行名
- bash - 用 Bash 打印修改日期
- python - 没有为任何变量提供梯度,Tensorflow 线性回归
- go - 在同一命名空间中生成具有相同名称的第二个函数
- python - python中的确定性分布噪声
- r - ggplot 仅在 y 轴上显示正值(分面图)
- jquery - jQuery多维数组和范围