2017-04-10 83 views
1

我當前的需求是在表單首次提交後向用戶顯示一條警告消息。當用戶下次點擊提交按鈕時,應該保存,因爲用戶可以忽略警告消息。ASP.NET MVC - 提交表單後的刷新頁面

我使用會話變量顯示警告消息,並將計數設置爲「1」以顯示警告消息。

問題是當用戶刷新頁面時,隨着viewmodel被傳遞給動作,表單被提交。我不想刷新提交表單。

由於第一次會話變量爲1,因此刷新也會提取與提交操作相同的視圖模型。

如果有方法區分MVC中的刷新和提交操作,請提供幫助。

+0

你必須提交兩次相同的表單嗎?不只是顯示確認對話框? – JamieD77

+0

是的,我需要顯示兩次相同的表單。我無法向他們顯示一個對話框。 – Vikram

+0

看看這可以幫助你http://stackoverflow.com/questions/2126747/how-to-supress-re-post-when-refreshing-a-page-asp-net-mvc – JamieD77

回答

0

這真的取決於警告是什麼,是檢查某些東西的警告還是默認情況下始終存在的警告?

如果默認情況下總是存在,最簡單的解決方案是在第一次按下假提交按鈕時通過某個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") 

}

+0

我必須在服務器端執行驗證。以下是我正在執行的步驟。 1. \t創建/學生。隱藏字段設置爲空。 2. \t用戶鍵入一些信息。 3. \t發佈「學生/創建/學生查看模型」 4. \t將隱藏字段設置爲1. 5. \t該視圖與警告消息一起顯示。 6. \t發佈Student/Create/StudentViewModel表單(不改變表單上的任何信息,數據應該保存) 問題在步驟5和6之間。當用戶刷新頁面時,表單正在由於用戶無需更改任何內容,因此提交。窗體在刷新時傳遞ViewModel。 – Vikram

+0

控制器決定表單是否提交,所以你的控制器是你的控制方法。首先提交隱藏字段爲空,所以在控制器中我們執行檢查警告,並用它檢查隱藏的字段是否爲空。如果hidden field = null,表單不提交,而是控制器返回模型和隱藏字段的頁面現在變爲1.請讓我知道如果這不明確,我會試着給你一個例子。 – Rob

+0

增加了一個例子來回答 – Rob