13

これは本当に奇妙なエラーです。おそらくカミソリのバグだと思います。VS 2012、MVC4、Framework 4.5 を使用しています。

次の手順に従ってください: http://www.asp.net/whitepapers/mvc4-release-notes#_Toc303253806 新しい MVC4 プロジェクトを作成し、すべてのコード (コントローラー、ビュー、ビューモデル) を MVC3 プロジェクトからコピーしました。

foreachカスタム ヘルパーを持つ 1 つのビューをテストし、その中に 1 つ、1 つswitch、3 つのifステートメントがあり、そこで他のカスタム ヘルパーも呼び出すまで、すべてがうまく機能しました。

両方のプロジェクトでまったく同じコードで、MVC3 では機能しますが、MVC4 では次のメッセージが表示されます。

Compiler Error Message: CS1513: } expected

そこで、中かっこを 1 つ追加しようとしましたが、同じエラーが表示されるので、かっこを追加し続けても、同じことを教えてくれません。

この問題をグーグル検索しましたが、答えのないこの質問を見つけました: http://www.1771.in/asp-net-mvc-4-issues-migrating-mvc3-view-in-vs-2012-rc.html

誰もこの問題を経験しましたか?

4

7 に答える 7

21

MVC4 の Razor パーサーは、MVC3 とは異なります。Razor v3 には高度なパーサー機能があり、MVC3 と比較して厳密な解析が行われます。

Razor 構文を正しい方法で使用していない場合、MVC3 を MVC4 に変換しているときにビューで構文エラーが発生することがあります。

Razor v2 で許可されていないいくつかの一般的な Razor コードの間違いの解決策は次のとおりです。

--> 変数宣言セクションがない限り、ビューでサーバー ブロックを使用しないでください。

Don’t : @{if(check){body}}
Recommended : @if(check){body}

--> 既にサーバー スコープにいる場合は、@ を使用しないでください。

Don’t : @if(@variable)
Recommended : @if(variable)

Don't : @{int a = @Model.Property }
Recommended : @{int a = Model.Property }
于 2013-04-08T12:31:14.853 に答える
6

私はまったく同じ問題を抱えていました。

Razor MVC3では、@ vSuggestionのように変数にアクセスしていましたが、MVC4では@は必要ありません。

私の例では、MVC3でこのコードが機能していました:

@{
    var vSuggestion = ((dynamic)ViewData["suggestion"]);   
}
<!-- more code here --> 
@{ int suggestion = @vSuggestion;
   switch (suggestion)
   {
       case Suggestion.INCORRECT_PASSWORD:
       case Suggestion.USER_ALREADY_IN_DATABASE:  
           <span>Trata de iniciar sesión de nuevo</span><br />
           <span>Recupera tu contraseña @Html.ActionLink("aquí", "Recover", "Account")</span>
       break;
       case Suggestion.EMAIL_DONT_EXISTS:  
           <span>Comprueba que el correo electrónico está bien escrito</span><br />
           <span>Registrate (abajo)</span>
       break;
   }                 
}

MVC4では、Razorはswitchステートメントから最初の中括弧をキャッチしていませんでした。そこで、@ vSuggestionから@を削除し、かみそりがコードを適切に解析しました。

それが役に立てば幸い。

于 2013-01-23T11:49:45.887 に答える
4

私もこの "Expected }" の問題に遭遇し、犯人は HTML コメントのアポストロフィであることが判明しました。これは Razor のバグのようです。

VS 2012 を使用して既定の MVC 4 アプリケーションでこの問題を再現する方法の例を次に示します。コメントからアポストロフィを削除すると、問題なく動作します。

@section featured {
    <!-- hello world it's not cool --> 
    <section class="featured">
        <div class="content-wrapper">
            <hgroup class="title">
                <h1>@ViewBag.Title.</h1>
                <h2>@ViewBag.Message</h2>
            </hgroup>
            <p>...</p>
        </div>
    </section>
}
于 2012-12-13T16:37:09.800 に答える
1

これはロングショットかもしれませんが、キーワードを使用している場合、そのエラーが発生することがあります

キーワード VS 2012 のリスト http://msdn.microsoft.com/en-us/library/x53a06bb%28v=vs.110%29.aspx

新しいキーワードのうち 2 つが 4.5 の await と async であることは知っています。

私が話していることの例については、次を参照して ください http://www.wduffy.co.uk/blog/css-class-property-asp-net-mvc-htmlattributes/

于 2012-10-10T22:22:03.860 に答える
0

これらの6/10を解決するために最も役立つのは、VS2012です。

[ファイル]->[ソース管理]->[詳細]->[このドキュメントのフォーマット]。

これにより、.netで大きなエラーが発生する、閉じられていないdiv、条件付きステートメント、ulやliも解決されます。

于 2012-10-16T13:48:15.637 に答える
0

この行を web.config に追加してみてください

<compilation debug="true" batch="false">

これで、エラーが発生したときに、一時的に生成された .cs ファイルを開いて、生成されたコードを確認できるはずです。

おそらく、問題をより簡単に見つけることができます。

詳細については、 ASP.NET 生成コードのデバッグを参照してください。

于 2012-10-09T23:38:19.907 に答える