web-dev-qa-db-ja.com

ASp.net MVC3を使用してDBに挿入した後、「正常に挿入されました」などのアラートメッセージを表示する方法

MVCを使用してデータベースにユーザーデータを保存した後、アラートメッセージを表示するためのコードを作成する方法:「正常に登録されました」

Asp.Net MVC3、C#、エンティティモデルを使用しています。

16
user581007

TempDataを使用してみてください:

public ActionResult Create(FormCollection collection) {
  ...
  TempData["notice"] = "Successfully registered";
  return RedirectToAction("Index");
  ...
}

次に、インデックスビューまたはマスターページなどで、次の操作を実行できます。

<% if (TempData["notice"] != null) { %>
  <p><%= Html.Encode(TempData["notice"]) %></p>
<% } %>

または、カミソリビューで:

@if (TempData["notice"] != null) {
  <p>@TempData["notice"]</p>
}

MSDNからの引用(2014年の時点でページはもう存在しません。アーカイブコピー ここ ):

アクションメソッドは、次のアクションを呼び出すためにコントローラーのRedirectToActionメソッドを呼び出す前に、コントローラーのTempDataDictionaryオブジェクトにデータを保存できます。 TempDataプロパティ値はセッション状態に保存されます。 TempDataDictionary値が設定された後に呼び出されるすべてのアクションメソッドは、オブジェクトから値を取得し、それらを処理または表示できます。 TempDataの値は、読み取られるか、セッションがタイムアウトするまで保持されます。このようにTempDataを永続化すると、TempDataの値は単一の要求を超えて利用できるため、リダイレクトなどのシナリオが可能になります。

27
Mike Mertsock

これを行うための「最善の」方法は、更新が成功したらビューオブジェクトにプロパティを設定することです。その後、ビューでこのプロパティにアクセスし、それに応じてユーザーに通知できます。

このようなことを行うことで、コントローラーのコードからアラートをトリガーすることが可能だと述べましたが-

public ActionResult ActionName(PostBackData postbackdata)
{
    //your DB code
    return new JavascriptResult { Script = "alert('Successfully registered');" };
}

この質問でさらに情報を見つけることができます- MVC3コントローラーを使用して「メッセージボックス」を表示する方法

5
ipr101

個人的には、AJAXを使用します。

@Ajax...ヘルパーに切り替えることができない場合は、モデルにいくつかのプロパティを追加することをお勧めします

public bool TriggerOnLoad { get; set; }
public string TriggerOnLoadMessage { get; set: }

ビューを強く型付けされたモデルに変更する

@using MyModel

ビューを返す前に、作成が成功した場合は次のようにします

MyModel model = new MyModel();
model.TriggerOnLoad = true;
model.TriggerOnLoadMessage = "Object successfully created!";
return View ("Add", model);

次に、ビューにこれを追加します

@{
   if (model.TriggerOnLoad) {
   <text>
   <script type="text/javascript">
     alert('@Model.TriggerOnLoadMessage');
   </script>
   </text>
   }
}

もちろん、タグ内で必要なことを行うことを選択できます。イベントはjQueryの準備ができた関数を宣言します。

$(document).ready(function () {
   alert('@Model.TriggerOnLoadMessage');
});

警告が正常に発行されたら、モデルのプロパティをリセットすることを忘れないでください。

MVCのもう1つの素晴らしい点は、これらすべてに対してEditorTemplateを実際に定義し、それをビューで使用できることです。

@Html.EditorFor (m => m.TriggerOnLoadMessage)

ただし、そのようなことを構築したい場合は、独自のC#クラスを定義する方が良いでしょう。

class ClientMessageNotification {
    public bool TriggerOnLoad { get; set; }
    public string TriggerOnLoadMessage { get; set: }
}

モデルにClientMessageNotificationプロパティを追加します。次に、ClientMessageNotificationクラスのEditorTemplate/DisplayTemplateを作成します。素晴らしく、きれいで、再利用可能です。

3
BigMike