ReSharper 8 + MVC“无法解析id”

时间:2013-07-26 13:05:46

标签: asp.net-mvc razor resharper resharper-8.0

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

1 个答案:

答案 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代码变得更加丑陋 - 我个人更喜欢那些无声的破坏。