razor view with anonymous type model class. It is possible?

Viewed 28636

I want to create a view using razor template, but I do not want to write a class for model, because in many views i will have many queries which will be returning diferent models.

For example I have a linq query:

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 */
};

I need to write a View for this query. This query returns a Articles.

Now I dont know how should looks like a model definition.

I tried to use this deffinition:

@model System.Collections.IEnumerable

But then I had an erros than fileds doesnt exists in object type:

*CS1061: 'object' does not contain a definition for 'addition_field' and no extension method 'addition_field' accepting a first argument of type 'object' could be found*

This is my model for which I do not want to write a next model. Of course

4 Answers

The simplest solution if you are using C# 7.0+ (introduced in Visual Studio 2017+) is to use a tuple rather than an anonymous type.

Razor View: "_MyTupledView.cshtml"

@model (int Id, string Message)

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

Then when you bind this view, you just send a tuple:

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