升级到ReSharper 8后,我开始在我的JavaScript中看到一堆不应该出现的警告。
在Razor .cshtml页面中,我有:
@Html.HiddenFor(model => model.Id)
@Html.EditorFor(model => model.Name)
在JavaScript / jQuery中,我有:
var id = $('#Id').val();
var name = $('#Name').val();
在新的ReSharper中,看起来他们添加了一个检查规则来搜索与CSS查询匹配的ID。但是,它无法从MVC / Razor语法中推断出ID,所以我几乎每个JQuery选择器都会收到警告。
有没有办法让ReSharper从MVC / Razor语法中推断出ID?我知道我可以关闭检查规则,但这不太可取。
答案 0 :(得分:0)
通常我讨厌没有直接回答问题的人,但提供“为什么不是你......而不是”解决方案。然而我在这里...... ;-) 也许你仍然喜欢这个解决方案。
由于重构,我最近设法打破了与你的非常相似的javascript代码(主要是jquery选择器)。
通过在HtmlHelper中添加以下扩展名(我没有提出它们,在网上找到它们)
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,您将获得“模型类型安全”的额外好处 唯一的缺点是它会使你的JavaScript代码变得更加丑陋 - 我个人更喜欢那些无声的破坏。