MVCを使用してデータベースにユーザーデータを保存した後、アラートメッセージを表示するためのコードを作成する方法:「正常に登録されました」
Asp.Net MVC3、C#、エンティティモデルを使用しています。
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の値は単一の要求を超えて利用できるため、リダイレクトなどのシナリオが可能になります。
これを行うための「最善の」方法は、更新が成功したらビューオブジェクトにプロパティを設定することです。その後、ビューでこのプロパティにアクセスし、それに応じてユーザーに通知できます。
このようなことを行うことで、コントローラーのコードからアラートをトリガーすることが可能だと述べましたが-
public ActionResult ActionName(PostBackData postbackdata)
{
//your DB code
return new JavascriptResult { Script = "alert('Successfully registered');" };
}
この質問でさらに情報を見つけることができます- MVC3コントローラーを使用して「メッセージボックス」を表示する方法
個人的には、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を作成します。素晴らしく、きれいで、再利用可能です。