2011-10-25 1 views
1

에 대한 MVC3 확장 : 내보기에 그래서는 다음과 같이, 내 검증 메시지를 사용자 정의를 위해 나는이 확장 방법을 썼다 ValidatorMessage

namespace Helpers 
{ 
public static class HtmlHelpers 
{ 
    public static MvcHtmlString ValidationMessageFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression) 
    { 
     var sb = new StringBuilder(); 

     string modelName = ExpressionHelper.GetExpressionText(expression); 
     ModelState state = htmlHelper.ViewData.ModelState[modelName]; 
     if (state != null) 
      if ((state.Errors != null) && (state.Errors.Count > 0)) 
      { 
       sb.Append("<div class='error-left'></div>"); 
       sb.Append("<div class='error-inner'>"); 
       sb.Append(htmlHelper.ValidationMessageFor(expression).ToString()); 
       sb.Append("</div>"); 
      } 

     return MvcHtmlString.Create(sb.ToString()); 
    } 
} 
} 

, 내가

@using HtmlHelpers 

또한

@Html.ValidationMessageFor(model => model.Name) 
를 넣어

하지만 예외가 발생합니다 :

The call is ambiguous between the following methods or properties: 'ContinentalWeb.Helpers.HtmlHelpers.ValidationMessageFor<ContinentalWeb.Models.Maker,string>(System.Web.Mvc.HtmlHelper<Type>, System.Linq.Expressions.Expression<System.Func<Type,string>>)' and 'System.Web.Mvc.Html.ValidationExtensions.ValidationMessageFor<Type,string>(System.Web.Mvc.HtmlHelper<Type>, System.Linq.Expressions.Expression<System.Func<Type,string>>)' 

MVC에서 새로운 기능이 있습니까?

감사합니다.

답변

3

확장 방법의 이름과 서명이 기본 이름과 동일합니다. 범위에서 동시에 2를 가질 수 없기 때문에 가능하지 않습니다. 충돌을 피하기 위해 메소드에 다른 이름을 지정하거나 인수의 수 및/또는 유형을 변경해야합니다. 예를 들어

:

public static MvcHtmlString CustomValidationMessageFor<TModel, TProperty>(
    this HtmlHelper<TModel> htmlHelper, 
    Expression<Func<TModel, TProperty>> expression 
) 
{ 
    ... 
} 

다음과 같이 사용 :

@Html.CustomValidationMessageFor(model => model.Name) 
+0

일을 그냥 날 이길! –

+0

대단히 감사합니다. Darin ... 다른 사이트의 코드를 복사했는데 어떻게 작동하는지 파악할 수 없습니다. 정말 고맙습니다 – gmosornoza

관련 문제