Asp.net mvc 4 ASP.NET MVC-提交表单后刷新页面

Asp.net mvc 4 ASP.NET MVC-提交表单后刷新页面,asp.net-mvc-4,Asp.net Mvc 4,我目前的要求是在第一次提交表单后向用户显示警告消息。当用户下次单击提交按钮时,应将其保存为用户可以忽略警告消息 我使用会话变量显示警告消息,并将计数设置为“1”以显示警告消息 问题是,当用户刷新页面时,表单将在viewmodel传递给操作时被提交。我不希望刷新提交表单 由于会话变量在第一次之后为1,因此刷新也会拾取与提交操作相同的视图模型 如果有办法区分MVC中的刷新和提交操作,请提供帮助。这实际上取决于警告的用途,警告是否检查某些内容,或者默认情况下警告是否始终存在 如果默认情况下总是存在,那

我目前的要求是在第一次提交表单后向用户显示警告消息。当用户下次单击提交按钮时,应将其保存为用户可以忽略警告消息

我使用会话变量显示警告消息,并将计数设置为“1”以显示警告消息

问题是,当用户刷新页面时,表单将在viewmodel传递给操作时被提交。我不希望刷新提交表单

由于会话变量在第一次之后为1,因此刷新也会拾取与提交操作相同的视图模型


如果有办法区分MVC中的刷新和提交操作,请提供帮助。

这实际上取决于警告的用途,警告是否检查某些内容,或者默认情况下警告是否始终存在

如果默认情况下总是存在,那么最简单的解决方案就是在第一次按下伪提交按钮时,通过一些jquery显示警告,并启用实际提交按钮,然后在警告出现且伪按钮消失时显示。因此,在html中的页面上,隐藏并禁用带有display:none和disabled的submit按钮,并在同一个位置放置一个假按钮,然后在js中执行类似的操作:

$('#yourformidhere').submit(function () {
            $('#fakesubmitbutton').hide();
            $('#realsubmitbutton'.show();
            $(this).find(':submit').prop('disabled', 'false');
        });
如果您必须在服务器端检查某些内容,则需要通过控制器返回页面和模型。在页面上,使用隐藏标记集显示“1”,然后在控制器中执行检查,如果检查失败,则返回页面,同时将标记更改为“2”并显示警告。然后,用户可以再次提交表单,您的控制器操作将检查“2”,如果发现它允许在不进行检查的情况下提交表单

编辑-示例:

表格:

@using (Html.BeginForm()){

@Html.Hiddenfor(model => model.hidden)

@Html.EditorFor(model = model.data1)

<input type ="submit" value"submit"/>
}
控制器

public ActionResult forumsubmit(someviewmodel model)
        {

//check to see if this is the first submission attempt

if (model.hidden == null){

      //check for whatever you need regarding the warning e.g.

      if (model.data1 == needswarning){

      //add your warning message here if it is to appear on the page for example a viewbag
      ViewBag.warning = "you've been warned"

     //change hidden field to 1 to acknowledge first submission attempt
     model.hidden = 1;

     //returns view with information intact for second submission
     return View(model);
    }

}

//if you reach here in the controller action the hidden field is either not null or there is no need for a warning so you can now process the form and add info to db here.

return View("submitsuccess")

}

您必须提交同一表格两次吗?不只是显示确认对话框?是的,我需要显示相同的表单两次。我不能向他们显示对话框。看看这是否有帮助。谢谢Jamie的回复。我调查了一下,发现了一个问题。在我的场景中,用户不需要做任何事情来纠正警告,可以忽略它。在此模式中的步骤4之后,如果用户进行刷新,则表单将重新提交。1.获取“产品/创建”2.某些信息中的用户类型3.发布“产品/创建”4.验证失败,重新显示带有警告的表单-用户更正输入5.发布“产品/创建”我必须在服务器端执行验证。以下是我正在执行的步骤。1.创建/学生。隐藏字段设置为空。2.用户输入一些信息。3.发布“Student/Create/StudentViewModel”4.将隐藏字段设置为1。5.该视图显示警告信息。6.发布表单Student/Create/StudentViewModel。(在不更改表单上的任何信息的情况下,应保存数据)问题在步骤5和6之间。当用户刷新页面时,表单将被提交,因为用户不需要更改任何内容。表单在刷新时传递ViewModel。控制器指示是否提交表单,因此控制器是您的控制方法。在第一次提交时,隐藏字段为null,因此在控制器中,我们执行警告检查,并使用它检查隐藏字段是否为null。如果hidden field=null,则表单不会提交,相反,控制器返回的页面中的model和hidden field现在更改为1。如果不清楚,请告诉我,我会给你举个例子。为回答添加了一个例子谢谢Rob的例子。我试过了。在第一次提交后,控制器将隐藏值作为1发送到视图,并且警告正确显示。当再次提交表单时,“再次隐藏”的值将变为空。我认为我不理解您遇到的问题。当返回页面时,表单上的隐藏值将为1,因此当您第二次提交表单时,隐藏值将作为1提交。你所说的隐藏“变为空”的值到底是什么意思?
public ActionResult forumsubmit(someviewmodel model)
        {

//check to see if this is the first submission attempt

if (model.hidden == null){

      //check for whatever you need regarding the warning e.g.

      if (model.data1 == needswarning){

      //add your warning message here if it is to appear on the page for example a viewbag
      ViewBag.warning = "you've been warned"

     //change hidden field to 1 to acknowledge first submission attempt
     model.hidden = 1;

     //returns view with information intact for second submission
     return View(model);
    }

}

//if you reach here in the controller action the hidden field is either not null or there is no need for a warning so you can now process the form and add info to db here.

return View("submitsuccess")