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