编辑表单并单击“保存”按钮后,HttpGet方法将在HttpPost方法之前执行。页面正在使用URL中的查询字符串重新加载,旧数据仍然填充字段,但数据已保存在服务器端。如果我删除查询字符串并重新加载页面,则会显示新数据。
我的期望是只调用HttpPost方法,保存更改保存,然后使用保存的更改加载页面。
使用Microsoft.AspNetCore.Mvc": "1.0.0
包。
以下是我的HttpGet
和HttpPost
方法:
[HttpGet]
[Route("~/Home/Activity/{activityId}")]
public IActionResult Activity(int activityId)
{
ViewData["Title"] = "Activity Detail";
FundraiserDBContext context = new FundraiserDBContext(_ServerName, EnvironmentCode);
Engagement activity;
if (activityId == -1)
{
activity = new Engagement();
context.Engagement.Add(activity);
}
else
{
activity = context.Engagement.FirstOrDefault(a => a.Id == activityId);
}
if (activity != null)
{
ActivityViewModel vmActivity = new ActivityViewModel(activity, context);
return View("Activity", vmActivity);
}
else
{
ActivityViewModel vmActivity = new ActivityViewModel(context);
return View("Activity", vmActivity);
}
}
[HttpPost]
[ValidateAntiForgeryToken]
//[Route("~/Home/Activity/{activityId}")]
public IActionResult Activity(ActivityViewModel vmActivity)
{
FundraiserDBContext db = new FundraiserDBContext(_ServerName, EnvironmentCode);
if (ModelState.IsValid)
{
db.Engagement.Update(vmActivity.ToEngagement(db));
db.SaveChanges();
}
return View("Activity", vmActivity); //this was vm.EngagementId
}
以下是“保存”按钮的代码:
<button type="submit" class="btn-success pull-right" style="width:80px;" onclick="location.href='@Url.Action("Activity", "Home", @Model)'">Save</button>
答案 0 :(得分:2)
从post方法中删除重定向,因为在返回View
之前将其重定向到Index
方法而没有更新模型
Redirect($"~/Home/Index"); // remove this line
答案 1 :(得分:0)
MatjažMav发现了我的错误,并在原帖后面的评论中对此进行了描述。我错误地认为我需要按钮上的onclick事件。删除它会导致我正在寻找的预期行为。
按钮代码现在看起来像这样:
<button type="submit" class="btn-success pull-right" style="width:80px;">Save</button>