2016-10-21 144 views
2

编辑表单并单击保存按钮后,HttpGet方法在HttpPost方法之前执行。该页面正在使用URL中的查询字符串重新加载,旧数据仍填充字段,但数据已保存在服务器端。如果我删除查询字符串并重新加载页面,则会显示新数据。页面提交后GET方法在POST方法之前执行?

我的期望是只有HttpPost方法会被调用,更改将被保存保存,然后页面将被加载与保存的更改。使用Microsoft.AspNetCore.Mvc": "1.0.0包。

这里是我HttpGetHttpPost方法:

[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> 
+1

你在哪里调用POST方法,'onclick'要调用GET请求 –

+0

就是这样。我根本不需要onclick。谢谢 – CoreyD

回答

0

MatjažMav发现我的错误,并在原帖子下方的评论中描述。我错误地认为我需要按钮上的onclick事件。删除这导致了我期待的预期行为。

按钮的代码现在看起来是这样的:

<button type="submit" class="btn-success pull-right" style="width:80px;">Save</button> 
2

删除post方法重定向,因为返回View其重定向到前方法Index没有更新的模型

Redirect($"~/Home/Index"); // remove this line 
+0

@CoreyD你现在已经在你的问题中删除它,它保持不变吗? – Mostafiz

+0

该行是我排除故障的一部分,我的错误。删除它会产生与上述相同的行为。 – CoreyD

相关问题