2013-07-26 1 views
1

ReSharper 8로 업그레이드 한 후에는 JavaScript에 여러 가지 경고가 나타나기 시작합니다.ReSharper 8 + MVC "ID를 확인할 수 없음"

@Html.HiddenFor(model => model.Id) 
@Html.EditorFor(model => model.Name) 

를 그리고 자바 스크립트/jQuery를에, 내가 가진 : 면도칼 .cshtml 페이지에서

, 내가 가진 그들이 검사를 추가처럼 새로운 ReSharper에서에서

var id = $('#Id').val(); 
var name = $('#Name').val(); 

를, 그것은 본다 CSS 쿼리와 일치하는 ID를 검색하는 규칙 그러나 MVC/Razor 구문에서 ID를 추론 할 수 없으므로 거의 모든 JQuery 선택기에서 경고가 표시됩니다.

ReSharper가 MVC/Razor 구문에서 ID를 추론 할 수있는 방법이 있습니까? 검사 규칙을 해제 할 수 있다는 것을 알고 있지만 덜 바람직합니다.

+0

자바 스크립트를 별도의 js 파일로 분리하는 것이 좋습니다. 이 문제는 해결 될뿐만 아니라 최소화, CDN 제공, 파일 캐싱 등의 다른 이점도 많이 누릴 수 있습니다. – asawyer

+1

스크립트를 별도의 .js 파일에 두어도이 문제가 해결되지 않았 음을 확인할 수 있습니다. ReSharper는 해당 뷰를 찾을 수있을만큼 똑똑하지만 요소 ID가 HtmlHelper에 의해 생성된다는 것을 여전히 인식하지 못합니다. – Rich

답변

0

대개 나는 직접 질문에 대답하지 않지만 "왜 ... 대신 ..."해결책을 제시하는 사람들이 싫습니다. 그러나 여기에 나는 간다. ;-) 아마 당신은 여전히 ​​해결책을 좋아한다.

리팩토링 때문에 최근에 나는 당신과 매우 비슷한 자바 스크립트 코드 (대부분 jquery 선택기)를 깨뜨 렸습니다. Html 헬퍼에 다음 확장을 추가를 통해

public static string GetFullHtmlFieldName<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression) { 
    return helper.ViewData.TemplateInfo.GetFullHtmlFieldName(expression); 
} 

public static string GetFullHtmlFieldId<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression) { 
    return helper.ViewData.TemplateInfo.GetFullHtmlFieldId(expression); 
} 

public static string GetFullHtmlFieldName<TModel, TProperty>(this TemplateInfo templateInfo, Expression<Func<TModel, TProperty>> expression) { 
    return templateInfo.GetFullHtmlFieldName(ExpressionHelper.GetExpressionText(expression)); 
} 

public static string GetFullHtmlFieldId<TModel, TProperty>(this TemplateInfo templateInfo, Expression<Func<TModel, TProperty>> expression) { 
    return templateInfo.GetFullHtmlFieldId(ExpressionHelper.GetExpressionText(expression)); 
} 

내 선택기 "모델 형 안전"을 만들 수 있었다 (나는 웹에 그들을 발견, 그들과 함께 오지 않았다) :

var id = $('#@Html.GetFullHtmlFieldId(model => model.Id)').val(); 

이 문제에 대한 직접적인 해결책은 아니지만, 그것은 ReSharper에서 만족합니다, 당신은 "모델 형 안전"의 추가 혜택을받을 유일한 단점은 그것이 당신의 자바 스크립트 코드 A를 만드는 것입니다 좀 더 못생긴 - 개인적으로 나는 그것을 깨는 것들보다 더 좋아한다. ilently.

+1

제공된 코드가 유효하지 않습니다. 즉, 'expression'을 GetFullHtmlField의 param 유형 인 문자열로 할당 할 수 없습니다. * ExpressionHelper.GetExpressionText (expression) 대신에 Expression을 사용하고 싶습니다. –

+0

+1, 늦은 추적을 위해 죄송합니다. 당신은 정확하고 여기에서 잘 돌아가고있는 이유는 당신이 설명한 것처럼 변환을하는 두 가지 확장 방법이 있다는 것입니다. 원본 게시물에 추가했습니다. – UweB