1

さて、私はこのコードを持っています:

    public ActionResult Welcome(string name = "", int numTimes = 1)
    {
        var viewModel = new WelcomeViewModel
        {
            Message = "Hello " + name,
            NumTimes = numTimes
        };

        return View(viewModel);
    }
    public class WelcomeViewModel
    {
        public string Message { get; set; }
        public int NumTimes { get; set; }
    }

Welcome() のビューは次のとおりです。

<h2>Welcome</h2>

<% for(int i = 0; i < Model.NumTimes; i++) {%>

    <h3><%: Model.Message; %></h3>
<%} %>

まず、これを実行すると、 .../Welcome?name=Scott&numtimes=4 を実行するとエラーが発生し、次の行で

<h3><%: Model.Message; %></h3>

')' が必要です

説明: この要求を処理するために必要なリソースのコンパイル中にエラーが発生しました。次の特定のエラーの詳細を確認し、ソース コードを適切に変更してください。コンパイラ エラー メッセージ: CS1026: ) が必要です

どうしてこれなの?


第二に、このモデル全体とは何ですか? それは何をするためのものか?

4

4 に答える 4

2

の後にセミコロンを付ける必要はないと思いますModel.Message

モデルは、コントローラーでビューに提供したものへの参照です。return View(viewModel);これは、コントローラーに入力したものと同じインスタンスです。

于 2010-12-18T00:16:42.780 に答える
2

これは、<%: Model.Message; %>(基本的に)次のように変換されるためです。

Response.Write(Model.Message;);

ご覧のとおり、セミコロンはありません。コンパイラは、セミコロンの前に括弧が必要であることを想定しているため、エラー メッセージが表示されます。

「モデルのこと」は MVC の M です。モデルは、ビューが表示するデータです。各ビューには単一のモデルがあるため、モデルにはビューが必要とするすべてのデータが含まれています。

于 2010-12-18T00:37:13.597 に答える
0

誤って配置されたセミコロンに加えて、ビューがから継承するように定義されていることを確認してくださいViewPage<WelcomeViewModel>。これはModel、ビュー内にある型を指定し、コンパイラーがそのメンバー(MessageNumTimes)を解決できるようにします。

于 2010-12-18T01:22:01.957 に答える
0

2 番目の質問に関しては、MVC はロジック (コントローラー内) をプレゼンテーション (ビュー内) から分離する方法です。

コントローラーを使用して、ビューに必要なすべての情報を含むモデルを生成します。

たとえば、フォームの場合、モデルには入力ごとにフィールドがあります。テーブルの場合、IEnumerable<SomeRowClass>などがあります...

ビュー自体は、処理をできるだけ少なくする必要があります。単純な if ステートメントとループです。実際のロジックはすべてコントローラーに制約する必要があります。

これを考える 1 つの方法は、開発者がコントローラーを作成し、デザイナーがビューを作成し、モデルの内容について協力するというものです。デザイナーは「X、Y、Z を知る必要がある」と言うので、開発者はそれらをモデルを作成し、必要に応じてフィールドに入力します

他の回答で述べたように、後のセミコロンModel.Messageは不要です。

于 2010-12-18T00:16:47.340 に答える