3

強く型付けされたビューのコンパイル時エラーが発生する可能性がある方法はありますか?/Views/Home/Index.cshtml次のコードと強く型付けされたモデルを含むビューがフォルダーにあるとします。

@model CSTemplate.Models.Home.HomeIndexModel

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

次に、にあるコントローラー/Controllers/HomeController.csは次のコードを返します。

public class HomeController : Controller
    {
        //
        // GET: /Home/

        public ActionResult Index()
        {
            List<string> s = new List<string>();
            return View(s);
        }

    }

ご覧のとおり、View()はオブジェクトをモデルとして受け入れるため、コンパイラーはモデルが無効であると文句を言わず、代わりに実行時エラーを出力します。これは次のとおりです。

Server Error in '/' Application.

The model item passed into the dictionary is of type 'System.Collections.Generic.List`1[System.String]', but this dictionary requires a model item of type 'CSTemplate.Models.Home.HomeIndexModel'.

このようなモデルタイプの不一致の場合に実行時エラーの代わりにコンパイル時エラーを取得できる方法はありますか、またはこれに対する回避策はありますか?

4

3 に答える 3

1

この質問での議論から、そのようなシナリオに対して推奨される回避策はないようです。ビューは type のモデルをパラメーターとして受け取るため、ビューobjectの厳密に型指定されたモデルとは異なる型のモデルを誤って渡しても、コンパイラーは文句を言いません。ビューの厳密に型指定されたモデルの型を変更する必要がある場合、コンパイラはそのような以前の一貫性のないモデルがビューに渡されたことを通知しませんが、そのようなエラーは実行時にのみ通知されるため、残念です。

于 2012-12-05T12:57:39.847 に答える
0

この問題を解決するために nuget パッケージをアップロードしました。これにより、厳密に名前が付けられたビューが生成されます。
ここで確認してください

https://www.nuget.org/packages/StronglyTypedViews/

于 2013-07-20T22:44:05.870 に答える
-1

return View(s);の型を返す必要があります

CSTemplate.Models.Home.HomeIndexModel //this is the type model expecting

いいえ

List<string> //this is the type you are returning to the model
于 2012-12-04T12:42:27.113 に答える