An extension method to remove properties from the model state the typed way in ASP.NET MVC
/// <summary>
/// Extensions for the <see cref="ModelStateDictionary"/> class.
/// </summary>
public static class ModelStateDictionaryExtensions
{
/// <summary>
/// Removes the specified member from the <see cref="ModelStateDictionary"/>.
/// </summary>
/// <param name="me">Me.</param>
/// <param name="lambdaExpression">The lambda expression.</param>
public static void Remove<TViewModel>(
this ModelStateDictionary me,
Expression<Func<TViewModel, object>> lambdaExpression)
{
me.Remove(GetPropertyName(lambdaExpression));
}
/// <summary>
/// Gets the name of the property.
/// </summary>
/// <param name="lambdaExpression">The lambda expression.</param>
/// <returns></returns>
private static string GetPropertyName(this Expression lambdaExpression)
{
var e = lambdaExpression;
while (true)
{
switch (e.NodeType)
{
case ExpressionType.Lambda:
e = ((LambdaExpression)e).Body;
break;
case ExpressionType.MemberAccess:
var propertyInfo =
((MemberExpression)e).Member
as PropertyInfo;
return propertyInfo != null
? propertyInfo.Name
: null;
case ExpressionType.Convert:
e = ((UnaryExpression)e).Operand;
break;
default:
return null;
}
}
}
}
Fork
Removing properties from the model state the typed way in ASP.NET MVC - @lennybacon Wednesday 08, 2010 12:27 AM
0 Feedback
You must log in before you can give any feedback
1
Added the AddError stuff...
/// <summary>
/// Adds the model error.
/// </summary>
/// <typeparam name="TViewModel">The type of the view model.</typeparam>
/// <param name="me">Me.</param>
/// <param name="lambdaExpression">The lambda expression.</param>
/// <param name="errorMessage">The error message.</param>
public static void AddModelError<TViewModel>(
this ModelStateDictionary me,
Expression<Func<TViewModel, object>> lambdaExpression,
string errorMessage)
{
me.AddModelError(GetPropertyName(lambdaExpression), errorMessage);
}
/// <summary>
/// Adds the model error.
/// </summary>
/// <typeparam name="TViewModel">The type of the view model.</typeparam>
/// <param name="me">Me.</param>
/// <param name="lambdaExpression">The lambda expression.</param>
/// <param name="exception">The exception.</param>
public static void AddModelError<TViewModel>(
this ModelStateDictionary me,
Expression<Func<TViewModel, object>> lambdaExpression,
Exception exception)
{
me.AddModelError(GetPropertyName(lambdaExpression), exception);
}
0
You must log in before you can post a comment


848
0


Mark 'asp.net' tag as 'like'
Mark 'asp.net' tag as 'ignore'