页面提交后,在POST方法之前执行GET方法?

时间:2016-10-21 16:41:08

标签: c# asp.net-core

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

我的期望是只调用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>

2 个答案:

答案 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>