2017-04-10 12 views
1

私の現在の要件は、フォームが初めて送信された後にユーザーに警告メッセージを表示することです。ユーザーが次回に送信ボタンをクリックすると、ユーザーは警告メッセージを無視できるので、保存する必要があります。フォームが送信された後のASP.NET MVC - ページの更新

私は、セッション変数を使用して警告メッセージを表示し、警告メッセージを表示するためにカウントを "1"に設定しています。

問題は、ユーザーがページを更新するときに、ビューモデルがアクションに渡されるときにフォームが送信されることです。私はリフレッシュしてフォームを提出したくありません。

最初にセッション変数が1になるため、リフレッシュでは送信アクションと同じビューモデルも取得されます。

MVCのリフレッシュアクションとサブミットアクションを区別する方法がある場合は、助けてください。

+0

同じフォームを2回提出する必要がありますか?確認ダイアログを表示するだけでなく、 – JamieD77

+0

はい、同じフォームを2回表示する必要があります。ダイアログボックスを表示することはできません。 – Vikram

+0

これが役立つかどうかをご覧くださいhttp://stackoverflow.com/questions/2126747/how-to-supress-re-post-when-refreshing-a-page-asp-net-mvc – JamieD77

答えて

0

本当に警告が何であるか、警告が何かをチェックしているか、警告が常にデフォルトで表示されていますか?

デフォルトでは、最も簡単な解決策は、偽の送信ボタンが押された最初のときに警告を表示し、偽の警告が表示されたときに実際の送信ボタンを有効にして表示することですボタンが消えます。あなたがチェックする必要がある場合

$('#yourformidhere').submit(function() { 
      $('#fakesubmitbutton').hide(); 
      $('#realsubmitbutton'.show(); 
      $(this).find(':submit').prop('disabled', 'false'); 
     }); 

:その後、何と無効になり、当初と同じ場所で偽のボタンを配置し、jsの中にこのような何か:だから、HTML非表示にするページと表示して送信ボタンをを無効にしません何かサーバー側の場合、コントローラを介してページとモデルを返す必要があります。このページでは、隠しマーカーを使用して '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作成/学生。隠しフィールドはnullに設定されます。 2. \tユーザーはいくつかの情報を入力します。 3. \t "Student/Create/StudentViewModel"を投稿してください 4. \t隠しフィールドを1に設定してください。 5. \tビューに警告メッセージが表示されます。 6. \tフォームStudent/Create/StudentViewModelを投稿してください(フォームの情報を変更せずにデータを保存してください) 問題は手順5と6の間です。ユーザーがページを更新すると、ユーザーは何も変更する必要はありませんので提出してください。フォームは更新時にViewModelを渡します。 – Vikram

+0

コントローラーがフォームを送信するかどうかを指示するので、コントローラーが制御方法になります。最初にサブミットしたフィールドはnullであるため、コントローラでは警告のチェックを行い、hiddenフィールドがnullであるかどうかをチェックします。非表示フィールド= nullの場合、フォームは送信されず、コントローラはモデルのページを返し、非表示フィールドは1に変更されました。これが明確でない場合は、私に例を挙げてお知らせします。 – Rob

+0

は、回答の例を – Rob