Jump to content

Recommended Posts

Posted

Boas,

Precisava de ajuda para algo que já me atormenta há algum tempo. Já perdi horas a pesquisar e trata-se realmente de algo que não encontro qualquer tipo de ajuda.

Expressions é algo que sempre tive bastante duvidas. Muitas vezes faço helpers aos quais uso muitas vezes expressões. 

No exemplo seguinte, por exemplo estou a ir buscar o nome da propriedade que o utilizador escolheu. Como se trata apenas de uma unica proriedade, ao fazer um Cast para MemberExpression tenho depois acesso à propriedade "Member" que tem toda a informação da propriedade da entidade.

@Html.DropdownFor(model => model.Id)

public static MvcHtmlString DropdownFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> espression)
{
  Expression body = espression.body;
  MemberExpression prop = (MemberExpression) body;
  var name = prop.Member.Name;
  
  .....
}

No entanto, quando faço algo como no exemplo seguinte, não sei como ler as várias propriedades. Quando corro a aplicação em debug, ao analisar o body da expressão mostra uma propriedade chamada "Members" em que consigo ver todos as propriedades da expressão. Quando vejo no quick watch, vejo que está a inicializar algo deste genero "new NewExpressionProxy(body).Members" mas trata-se de uma classe protegida interna do linq. 

@Html.DropdownFor(model => new { model.Id, model.Name })

public static MvcHtmlString DropdownFor<TModel>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, object>> espression)
{ 
  .....
}

 

Em suma, o que preciso de fazer para ler a colecção de propriedades?

 

Obrigado

  • 2 years later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.