Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

MVC3からMVC5に移行するときにしたこと

Web.config内のMVCのバージョン修正

プロジェクトフォルダ直下のWeb.config

  • 修正前
<configuration>
  <appSettings>
    <add key="webpages:Version" value="1.0.0.0"/>
  • 修正後
<configuration>
  <appSettings>
    <add key="webpages:Version" value="3.0.0.0"/>

プロジェクトフォルダ/View/Web.config

  • 修正前
<configuration>
  <configSections>
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=XXX">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=XXX" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=XXX" requirePermission="false" />
    </sectionGroup>
  </configSections>

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=XXX" />
  • 修正後

Version= の値を修正

<configuration>
  <configSections>
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=XXX">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=XXX" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=XXX" requirePermission="false" />
    </sectionGroup>
  </configSections>

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.7.0, Culture=neutral, PublicKeyToken=XXX" />

Razor構文チェックが厳しくなった

コードブロック内に不要な@がある場合、MVC3ではエラーにならなかったが、MVC5ではエラーになるようになった。

参考: https://docs.microsoft.com/ja-jp/aspnet/core/mvc/views/razor?view=aspnetcore-3.1
「Razor ファイルに余分な @ 文字があると、ブロックの後続のステートメントでコンパイラ エラーが発生することがあります。」

例1

  • 修正前
@{
    ViewBag.Menu = "Main Menu";
    ViewBag.Title = @Html.Resource("title");
}
  • 修正後
@{
    ViewBag.Menu = "Main Menu";
    ViewBag.Title = Html.Resource("title");
}

例2

  • 修正前
@if (!string.IsNullOrEmpty(Model.Hoge))
{
    @string.Format("NAME:{0}", Model.Hoge)
}
  • 修正後
@if (!string.IsNullOrEmpty(Model.Hoge))
{
    <text>@string.Format("NAME:{0}", Model.Hoge)</text>
}

input type="hidden"のvalueにbool値を設定するときの扱いが変わった

HTML5の仕様に準拠した形になったらしい。
参考: https://stackoverflow.com/questions/28849729/asp-net-mvc-5-renders-different-bool-value-for-hidden-input

MVC3の場合

valueにbool値を設定すると、true/falseに変換される

<input type="hidden" id="isHoge" value="@Model.IsHoge" />

<input type="hidden" id="isHoge" value="true" />

MVC5(MVC4以降)の場合

  • @Model.IsHogeがtrueの場合
<input type="hidden" id="isHoge" value="value" />
  • @Model.IsHogeがfalseの場合
<input type="hidden" id="isHoge" />
  • 修正後
<input type="hidden" id="isHoge" value="@Model.IsHoge.ToString()" />
hexachord4m
個人的な備忘録
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away