我當前的需求是在表單首次提交後向用戶顯示一條警告消息。當用戶下次點擊提交按鈕時,應該保存,因爲用戶可以忽略警告消息。ASP.NET MVC - 提交表單後的刷新頁面
我使用會話變量顯示警告消息,並將計數設置爲「1」以顯示警告消息。
問題是當用戶刷新頁面時,隨着viewmodel被傳遞給動作,表單被提交。我不想刷新提交表單。
由於第一次會話變量爲1,因此刷新也會提取與提交操作相同的視圖模型。
如果有方法區分MVC中的刷新和提交操作,請提供幫助。
我當前的需求是在表單首次提交後向用戶顯示一條警告消息。當用戶下次點擊提交按鈕時,應該保存,因爲用戶可以忽略警告消息。ASP.NET MVC - 提交表單後的刷新頁面
我使用會話變量顯示警告消息,並將計數設置爲「1」以顯示警告消息。
問題是當用戶刷新頁面時,隨着viewmodel被傳遞給動作,表單被提交。我不想刷新提交表單。
由於第一次會話變量爲1,因此刷新也會提取與提交操作相同的視圖模型。
如果有方法區分MVC中的刷新和提交操作,請提供幫助。
這真的取決於警告是什麼,是檢查某些東西的警告還是默認情況下始終存在的警告?
如果默認情況下總是存在,最簡單的解決方案是在第一次按下假提交按鈕時通過某個jquery顯示警告,並且啓用實際提交按鈕,並在出現警告時顯示該警告按鈕消失。所以在HTML隱藏在頁面上,禁用與顯示器的提交按鈕:none和殘疾人最初並放置在同一個地方一個假的按鈕,然後像這樣在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 class someviewmodel{
public string data1 { get; set; }
public int hidden { get; set; }
}
控制器
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")
}
我必須在服務器端執行驗證。以下是我正在執行的步驟。 1. \t創建/學生。隱藏字段設置爲空。 2. \t用戶鍵入一些信息。 3. \t發佈「學生/創建/學生查看模型」 4. \t將隱藏字段設置爲1. 5. \t該視圖與警告消息一起顯示。 6. \t發佈Student/Create/StudentViewModel表單(不改變表單上的任何信息,數據應該保存) 問題在步驟5和6之間。當用戶刷新頁面時,表單正在由於用戶無需更改任何內容,因此提交。窗體在刷新時傳遞ViewModel。 – Vikram
控制器決定表單是否提交,所以你的控制器是你的控制方法。首先提交隱藏字段爲空,所以在控制器中我們執行檢查警告,並用它檢查隱藏的字段是否爲空。如果hidden field = null,表單不提交,而是控制器返回模型和隱藏字段的頁面現在變爲1.請讓我知道如果這不明確,我會試着給你一個例子。 – Rob
增加了一個例子來回答 – Rob
你必須提交兩次相同的表單嗎?不只是顯示確認對話框? – JamieD77
是的,我需要顯示兩次相同的表單。我無法向他們顯示一個對話框。 – Vikram
看看這可以幫助你http://stackoverflow.com/questions/2126747/how-to-supress-re-post-when-refreshing-a-page-asp-net-mvc – JamieD77