Я хочу обновить ответ Джима, чтобы использовать новые вспомогательные функции MVC 3.
Вспомогательные функции упрощают написание функций, которые в основном возвращают Html / javascript, поэтому вам не нужно использовать построитель строк или конкатенацию строк. В результате получается намного более чистый код.
FlashHelpers.cs :
namespace System.Web.Mvc {
public static class FlashHelpers {
public static void FlashInfo(this Controller controller,string message) {
controller.TempData["info"] = message;
}
public static void FlashWarning(this Controller controller, string message) {
controller.TempData["warning"] = message;
}
public static void FlashError(this Controller controller, string message) {
controller.TempData["error"] = message;
}
}
}
Затем вы создаете папку ASP.NET App_Code и создаете там файл .cshtml (вероятно, Flash.cshtml) и вставляете следующий код
App_Code / Flash.cshtml :
@helper FlashMessage(TempDataDictionary tempData){
var message = "";
var className = "";
if (tempData["info"] != null)
{
message = tempData["info"].ToString();
className = "flashInfo";
}
else if (tempData["warning"] != null)
{
message = tempData["warning"].ToString();
className = "flashWarning";
}
else if (tempData["error"] != null)
{
message = tempData["error"].ToString();
className = "flashError";
}
if (!String.IsNullOrEmpty(message))
{
<script type="text/javascript">
$(document).ready(function() {
$('#flash').html('@message');
$('#flash').toggleClass('@className');
$('#flash').slideDown('slow');
$('#flash').click(function(){$('#flash').toggle('highlight')});
});
</script>
}
}
Это делает то, что делала функция Flash раньше, но гораздо чище.
Остальные вещи остаются такими же, как в ответе Джима, за исключением того, как вы это называете. Вместо того, чтобы использовать @ Html.Flash (), вам нужно назвать его так:
@Flash.FlashMessage(TempData)
Обратите внимание, что Flash в приведенной выше строке является именем файла .cshtml в папке App_Code.
Надеюсь, это поможет.