可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
In VS 2015, only when in Razor (.cshtml) files, roughly half of the time the autocomplete/suggestion list/intellisense doesn't work correctly (sorry, not sure the actual term... when you type an object and hit .
and the list of properties and methods shows to select from)
The behavior is that when I hit .
, the list popups up for a fraction of a second and then closes. It happens so fast I try to do a quick Backspace
, .
, Backspace
, .
cycle a few times to at least see the name I need, but I usually cant' get it and end up having to find the exact name elsewhere from code. Extremely irritating...
It happens sporadically with no real pattern I can find. Here's patterns that I've ruled out:
- The file that's open doesn't seem to matter.
- Whether or not I close/reopen the file doesn't seem to matter
- Whether I navigate to another file and back doesn't seem to matter
- It will work/not work multiple times on and off throughout the same file
- It doesn't seem to be relevant to any particular object/property/method
I've checked all my options (there doesn't seem to be Text Editing options for Razor?), have tried clearing caches, the reloading solution/projects, restarting VS, all of which seem to still provide no pattern.
Has anyone come across this and have any ideas of where else I can look to fix it?
Example
Here's an extremely simple example... new project, very little code/files, very simple view. Where the Model.
stops, I should have the usual base methods, and an 'Items' collection. It pops up for a split second then disappears... no lambdas/complex view parsing involved (this is reproducible as well):
Update: Patterns
Things I've noticed:
- If I'm entering a
@model ns.ns.ns.type
, it rarely happens toward the "base" end of the namespaces. It's as I get further towards the type that it happens. This one is intermittent.
- In some cases, it works perfectly fine, every single time. For example, I often use DevExpress tools, and have never seen the behavior on any of their extensions (so,
@Html.DevExpress().
(and other similar, not necessarily DevEx models) will never cause a problem)
- It happens almost all the time when I'm accessing my
@Model
(which is where I most want it!). I've found some cases where this is reproducible every time (see above example), but it's about 90%+
- Occasionally, as I work through the object tree, one will fail while the next works (ex:
@models ProjName.Web.App.Subscriptions.Models.AccountCreateVM
... it might fail on Subscriptions
but work fine on Models
)
- Occasionally, beginning to type the name within autocomplete kicks it back into gear and it starts working again. In the above example, starting to type
Acc
for AccountCreateVM
causes it to start working again.
回答1:
I haven't found the root cause, but in all cases, CTRL+SPACE
works. This isn't the best, but light years better than nothing at all.
(this shortcut is not one I've used in the past, so this is likely standard behavior, but...) If you're at the dot Model.
and autocomplete list disappears, CTRL+SPACE consistently brings it back up, and when it does come back, it stays! If there's only one possible autocomplete member, it'll auto-fill the member for you upon CTRL+SPACE
回答2:
This happens for me all throughout VS2015 during lambda statements.
It happens when editing code "mid-document", as in, if there is anything besides a ) or } following where I'm typing. VS appears to be struggling to tell where the current statement ends & the next statement begins.
The following code will consistently fail to trigger Intellisense at the period, even when explicitly invoked.
var subset = initialSet.Where(x => x.
var result = new Whatever();
In Razor, it is very common to be editing code between existing text and using lambda statements:
<strong>@Html.DisplayFor(m => m.</strong>
This is probably why you only experience this in Razor.
The way I work around this bug is just to write the ) to close the method.
var subset = initialSet.Where(x => x.)
var result = new Whatever();
<strong>@Html.DisplayFor(m => m.)</strong>
Intellisense can then be triggered on the period.
If you're using a method that requires a minimum of more than just the lambda (like RadioButtonFor), you'll also need to put in a comma for each of the extra parameters.
<strong>@Html.RadioButtonFor(m => m.,)</strong>
If Intellisense is appearing, but immediately disappearing again, the best solution I've found so far is to just type a few letters of any known member, then using Ctrl-Left to skip back to the period, and trigger Intellisense again (Ctrl-Space or backspace-retype). This usually gets it to appear and stay. You'll have to delete the characters you typed afterwards, which can be frustrating.
回答3:
Just make sure the )
does not touch the text you are editing, and the popup will stay up.
Instead of...
@Html.Partial("ManageGrid", Model.)
Use...
@Html.Partial("ManageGrid", Model. )
The intellisense seems to get confused by touching close parenthesis. Not ideal, but this was the only way I could get it to work for me consistently.
回答4:
I had the same error and I fixed it by deleting all the files of the component model cache.
This is the path:
Users\YourName\AppData\Local\Microsoft\VisualStudio\14.0\ComponentModelCache
Hope that helps
回答5:
In my specific case, i was able to solve the problem by installing the latest version Microsoft ASP.NET and Web Tools.
https://marketplace.visualstudio.com/items?itemName=JacquesEloff.MicrosoftASPNETandWebTools-9689
Once I installed it, the problem was gone. It is likely that this update fixed something that could be fixed with an older version, but either way I'm happy.
(I found this in Visual Studio under Tools->Extensions and Updates...->Updates->Visual Studio Gallery)
回答6:
I use ctrl+j as a temporary solution when I know the content.
Or keep writing without right parenthesis can use the completion:
@Html.LabelFor(m => m.Name
回答7:
Whenever this annoying thing happens to me, I just put an extra dot and then it works. I have to put the extra dot every time. For example, if I write this and intellisence flashes and disappears:
@Html.TextBoxFor(m => m.
then I just do this:
@Html.TextBoxFor(m => m..
And intellisense will now show after first dot. I have made this a habit until MS has a fix for it.
回答8:
Instead of...
@Html.Partial("ManageGrid", Model.)
Use...
@Html.Partial("ManageGrid", Model.