ビューにアクセスしようとすると、MVC3 Razor アプリケーション (ASP.NET) で問題が発生する モデルは次のようになります (注釈は削除されています)
namespace MvcTest.Models {
public class ContactMeModel {
public string From { get; set; }
public string Subject { get; set; }
public string Message { get; set; }
}
}
ビューには次のようなものがあります(部分的で、エラーが発生する部分を入れるだけで、それを乗り越えることはできません...
@model MvcTest.Models.ContactMeModel
@{
ViewBag.Title = "test"
}
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<div class="editor-label">
@Html.LabelFor(model => model.From)
</div>
}
名前空間は正しいですが、インテリセンスはモデルを認識しないかのようにマークアップの .From 部分に赤を表示しますが、これは機能するビューでも発生します。
ビューにアクセスすると、次のエラーが発生します。
CS1061: 'object' does not contain a definition for 'From' and no extension method 'From' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
(a) Mvc Web プロジェクトには、モデルを含む DLL への参照がある (b) プロジェクト全体がクリーンアップされ、再構築されている (c) ビュー内のモデル参照には、正しい完全修飾モデル名 (d) があるため、これは奇妙です。 ) モデル クラスが存在する (e) そのビューでの実行時を除き、コンパイル エラーはありません。
ちなみに、 @Html.LabelFor がある場所ならどこでもエラーが発生するため、たとえば、在庫の LogOn.cshtml には同じエラーを生成する行があります。
@Html.LabelFor(m => m.UserName)
そして、「インテリセンス」では、ジグザグの赤い線で下線が引かれた「ユーザー名」のテキストが表示され、インテリセンスは同じエラーについて言及しています。しかし、同じページでモデル名に @model 行を重ねて「定義に移動」を実行すると、VS によって定義が表示されます。それで、それはモデルが何であるかを知っていますが、完全ではありません?! モデルの名前空間が正しくない場合、「定義に移動」を選択すると「ナビゲーション」エラーが発生します。
コントローラー アクション メソッドは次のようになります。
public ActionResult Contact()
{
return View(new Coralys.PanamaVibes.Mvc.Models.ContactMeModel());
}
そうです、匿名型ではなく、正しいモデルを返します。