---
title: "Tillvägagångssätt för att visa meddelanden till användaren i MVC projekt"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/185581-tillvägagångssätt-för-att-visa-meddelanden-till-användaren-i-mvc-projekt"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "doggelito"
published: "2010-12-20T14:09:36.000Z"
updated: "2011-01-04T22:20:02.000Z"
replies: 1
views: 1237
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/185581-tillvägagångssätt-för-att-visa-meddelanden-till-användaren-i-mvc-projekt"
---

# Tillvägagångssätt för att visa meddelanden till användaren i MVC projekt

## #1 — doggelito, 2010-12-20T14:09Z

Hej, 
Jag skulle vilja förfina denna kod (om det går) och behöver lite input från er.
Jag har ganska många upprepningar av liknande kod:

```
public ActionResult Index()
{
       var model = new AuthenticationViewModel();

       if (TempData["Message"] != null)
       {
            model.Message = TempData["Message"].ToString();
       }

       return View(model);
}
```

Visar sedan meddelandet:

```
<%= Html.Message(Model.Message) %>
```

Ser ni något sätt att få till ett action filter för detta ändamål?
Det jag skulle vilja få bort är if-satsen i kontrollen. Skulle man kunna i ett filter känna av om TempData\["Message"\] inte är en tom sträng och då fylla modellens Message property automatiskt.
Krukset jag ser är att jag skapar upp olika ViewModels i olika kontrollers och gör man ett filter som körs OnActionExecuting så vet inte filtret vilen viewmodel som används. Å andra sidan har alla custom viewmodels en gemensam basklass där propertyn ligger.

På något sätt vilja alltså ha det så här:

```
[MessageFilter(möjligtvis att man anger vilken viewmodel som används här: typeof(AuthenticationViewModel))]
public ActionResult Index()
{
       var model = new AuthenticationViewModel();

       return View(model); //här är model.Message fylld med text om ViewData["Message"] innehåller en sträng.
}
```

Detta är kanske omöjligt att uppnå? Skulle det finnas ett annat sätt? 
Det ända jag vill är att slippa hämta upp TempData\["Message"\] i alla kontroller!

Permalänk: https://www.webforum.nu/p/185581

## #2 — TomasJ, 2011-01-04T22:20Z

Du kanske kan implementera OnResultExecuting i ett filter, ungefär så här:

```
    [FilterPopulatingMessagePropertyWithTempDataMessage]
    public ActionResult Index() {
        // ...

    public class AuthenticationViewModel : ViewModelBase {
        // ...
    }
    public abstract class ViewModelBase {
        public string Message { get; set; }
        // ...
    }

    public class FilterPopulatingMessagePropertyWithTempDataMessage : ActionFilterAttribute
    {
        public override void OnResultExecuting(ResultExecutingContext resultExecutingContext)
        {
            var actionResult = resultExecutingContext.Result;
            if (actionResult is ViewResult)
            {
                var viewResult = (ViewResult)actionResult;
                var viewModel = viewResult.ViewData.Model;
                var tempData = viewResult.TempData;
                if (viewModel is ViewModelBase)
                {
                    var viewModelBase = (ViewModelBase)viewModel;
                    if (tempData[MessageKey] != null)
                    {
                        viewModelBase.Message = tempData[MessageKey].ToString();
                    }
                }
            }
        }
        private const string MessageKey = "Message";
    }
```

> **[doggelito skrev:](https://www.webforum.nu/p/1525649)**
>
> Hej, 
> Jag skulle vilja förfina denna kod (om det går) och behöver lite input från er.
> Jag har ganska många upprepningar av liknande kod:
>
>
> ```
> public ActionResult Index()
> {
>        var model = new AuthenticationViewModel();
> 
>        if (TempData["Message"] != null)
>        {
>             model.Message = TempData["Message"].ToString();
>        }
> 
>        return View(model);
> }
> ```
>
> 
> 
> Visar sedan meddelandet:
>
>
> ```
> <%= Html.Message(Model.Message) %>
> ```
>
> 
> 
> Ser ni något sätt att få till ett action filter för detta ändamål?
> Det jag skulle vilja få bort är if-satsen i kontrollen. Skulle man kunna i ett filter känna av om TempData\["Message"\] inte är en tom sträng och då fylla modellens Message property automatiskt.
> Krukset jag ser är att jag skapar upp olika ViewModels i olika kontrollers och gör man ett filter som körs OnActionExecuting så vet inte filtret vilen viewmodel som används. Å andra sidan har alla custom viewmodels en gemensam basklass där propertyn ligger.
> 
> På något sätt vilja alltså ha det så här:
>
>
> ```
> [MessageFilter(möjligtvis att man anger vilken viewmodel som används här: typeof(AuthenticationViewModel))]
> public ActionResult Index()
> {
>        var model = new AuthenticationViewModel();
> 
>        return View(model); //här är model.Message fylld med text om ViewData["Message"] innehåller en sträng.
> }
> ```
>
> 
> 
> Detta är kanske omöjligt att uppnå? Skulle det finnas ett annat sätt? 
> Det ända jag vill är att slippa hämta upp TempData\["Message"\] i alla kontroller!

Permalänk: https://www.webforum.nu/p/2265714

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/185581-tillvägagångssätt-för-att-visa-meddelanden-till-användaren-i-mvc-projekt
