1

升级到 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?我知道我可以关闭检查规则,但这不太可取。

4

1 回答 1

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 代码有点难看 - 我个人更喜欢这样事情无声无息地破裂。

于 2013-07-26T13:15:01.107 回答