widok brzytwy z klasą modelu typu anonimowego. To jest możliwe?

widok brzytwy z klasą modelu typu anonimowego. To jest możliwe?

Krótka odpowiedź brzmi, że używanie typów anonimowych nie jest obsługiwane, jednak istnieje obejście, możesz użyć ExpandoObject

Ustaw swój model na @model IEnumerable<dynamic>

Następnie w kontrolerze

from p in db.Articles.Where(p => p.user_id == 2)
select new
{
    p.article_id, 
    p.title, 
    p.date, 
    p.category,
    /* Additional parameters which arent in Article model */
}.ToExpando();

...
public static class Extensions
{
    public static ExpandoObject ToExpando(this object anonymousObject)
    {
        IDictionary<string, object> anonymousDictionary = HtmlHelper.AnonymousObjectToHtmlAttributes(anonymousObject);
        IDictionary<string, object> expando = new ExpandoObject();
        foreach (var item in anonymousDictionary)
            expando.Add(item);
        return (ExpandoObject)expando;
    }
}

Najprostszym rozwiązaniem, jeśli używasz C# 7.0+ (wprowadzonego w Visual Studio 2017+), jest użycie krotki zamiast typu anonimowego.

Widok brzytwy:„_MyTupledView.cshtml”

@model (int Id, string Message)

<p>Id: @Model.Id</p>
<p>Id: @Model.Message</p>

Następnie, gdy powiążesz ten widok, po prostu wyślesz krotkę:

var id = 123;
var message = "Tuples are great!";
return View("_MyTupledView", (id, message))