Visual Studio 코드 서식이 Razor 태그에 대해 제대로 작동하지 않는 이유는 무엇입니까?
아니면 VS 코드 서식이 Razor 마크 업에 대해 제대로 작동하는지 물어봐야합니까? 형식은 대부분의 구조에서 작동하지만 'if'블록에서 질식하는 것 같습니다. 아래 코드는 VS로 포맷 된 것과 같습니다. 들여 쓰기를 한 번 더하면이 경우를 고치는 것은 매우 쉽습니다.하지만 저는 일상적인 사용에서 서식을 잘 받아 들였고 내 코드의 대부분에 자주 사용하는 것을 좋아하므로 가능하면 수동 서식을 피하는 것이 좋습니다. 지금은 VS 형식으로 그대로 둡니다.
@{
if (User.Identity.IsAuthenticated)
{
<text>Hello </text>
@Html.Display("@ViewBag.UserName") <text> - </text>
@Html.ActionLink("Sign Out", "LogOff", "Account", null, new { style = "font-weight: bold;" })
}
}
나는 가독성을 위해 예를 들어 위의 경우 if 블록의 본문이 더 멋지게 보이는 것 외에도 들여 쓰기가 중요하다고 생각합니다.
탭이 아닌 공백 문자를 사용하도록 편집기를 설정해야합니다. 탭을 사용할 때 편집기는 완전히 정신을 잃은 것 같습니다. 모든 공백 문자가 실제 HTML 출력으로 끝나고 데이터 전송 크기가 크게 증가하기 때문에 이것은 부끄러운 일입니다. 내가하는 일은 입력 할 때 자동 서식을 수동으로 보완하는 것입니다. 이상적이지는 않지만 Microsoft가 다음 서비스 팩에 대해이를 파악할 수 있기를 바랍니다.
탭 들여 쓰기를 계속 사용하고 올바른 형식을 가질 수있는 하나의 "솔루션"을 찾았습니다. 패턴에 가깝습니다. 핵심은 인라인 코드 대신 면도기 코드 블록을 사용하는 것입니다.
예를 들어 다음을 대체하십시오.
<div>
<div>
@if (true)
{
<b>Hi</b>
}
</div>
</div>
와:
<div>
<div>
@{
if (true)
{
<b>Hi</b>
}
}
</div>
</div>
후자는 올바르게 포맷되지만 전자는 포맷되지 않습니다.
형식이 완벽하지는 않지만 이전보다 낫습니다.
해결하기 어려운 문제이기 때문에 모든 경우에 올바르게 작동하지 않습니다. 기본적으로 3 개의 다른 편집기 (HTML, C # 및 Razor)가 모두 동일한 텍스트 버퍼에서 상호 작용합니다. 상호 작용에 버그가있는 경우 (이와 같은)가 있습니다. 그러나 우리는 Razor의 다음 릴리스를 위해 편집기를 개선하기 위해 노력하고 있습니다.
여기서 더 좋은 대안은 (탭에 공백을 사용하는 것보다) HTML 및 C # / VB의 블록 들여 쓰기를 "Smart"대신 "Block"으로 변경하는 것입니다. 이것은 완전한 솔루션은 아니지만 IMO는 공백을 사용하는 것보다 훨씬 덜 고통스러운 해결 방법입니다!
이에 대한 또 다른 해결책을 찾았습니다. 파일의 모든 코드를 선택하고 Shift + 탭을 클릭하여 코드 앞의 모든 탭을 제거하고 복사하여 붙여 넣습니다. Visual Studio는 코드 형식을 자동으로 지정합니다. VS 2013 .cshtml 파일 작업
제 경우에는 서식 옵션을 재정의하는 것이 resharper였습니다.
reshaper를 사용 하고이 문제가 발생하면 이것을 시도하십시오 ...
Resharper >> 옵션 >> Razor >> 편집기 및 서식 >> "입력시 자동 서식"선택 해제
나는 그것이 당신이 찾고있는 답이 아니라는 것을 알고 있지만 WriteLiteral을 사용하여 내 서식 문제를 해결했습니다.
예를 들어, 내가 쓸 때 :
<div>
@foreach (var item in Model) {
if (condition) {
@:</div><div>
}
<a href="@item.Url">@item.Label</a>
}
</div>
Visual Studio는이를 다음과 같이 변경하려고합니다.
<div>
@foreach (var item in Model) {
if (condition) {
@:
</div><div>
}
<a href="@item.Url">@item.Label</a>
}
</div>
이로 인해 페이지에서 오류가 발생합니다.
WriteLiteral을 사용하면 포맷터를 속여 줄을 무시할 수 있지만 예쁘지 않습니다.
<div>
@foreach (var item in Model) {
if (condition) {
WriteLiteral("</div><div>");
}
<a href="@item.Url">@item.Label</a>
}
</div>
지금은 VS2013 ASP.NET MVC 5를 사용 중이며 여전히 문제가 있습니다. 내가 많이 도움이 된 것은 여는 블록 기호가 ( @{
) 인 같은 줄에 첫 번째 표현식을 넣는 것입니다 . 이렇게하면 면도기 코드 서식이 훨씬 더 나은 결과를 얻을 수 있습니다. 다음은 전후 사례입니다.
전에
후
I work with VS2017 15.9.2 and still have the problem.
After change the editor settings to use spaces instead of tabs, the behavior in editing (e.g. copy - paste code lines) is way better, but "Format Document" still add wrong indents by every call.
No solution, but a short update:
It seems as the issue is solved partial in Visual Studio 2019 version 16.0 Preview 2.1
Link to MS for the issue
I recommend you prevent automatic formatting to trigger by commenting the piece of code where you paste. This way things don't get broken on paste.
'developer tip' 카테고리의 다른 글
ASP.NET MVC 용 플러그인 아키텍처 (0) | 2020.11.02 |
---|---|
JUnit 4에서 특정 카테고리에 속하는 모든 테스트를 실행하는 방법 (0) | 2020.11.02 |
Sourcetree 테마는 어떻게 변경할 수 있습니까? (0) | 2020.11.02 |
Angular2 : 래핑 태그없이 컴포넌트 렌더링 (0) | 2020.11.02 |
배낭 문제를 이해하는 방법은 NP 완전입니까? (0) | 2020.11.02 |