2010-12-18 11 views
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; } 
    } 

と歓迎のビューを(ある:まず

<h2>Welcome</h2> 

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

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

、私はこれを実行したときに実行しているとき、私はエラーを取得します。..ラインに

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

それは期待していることを言っ./Welcome?name=Scott & numtimes = 4 ')'

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

なぜですか?


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

答えて

2

<%: Model.Message; %>並進(基本的に)ので、それはです:あなたが見ての通り、セミコロンはすべきではない

Response.Write(Model.Message;); 

。コンパイラは、セミコロンが存在する前に終了括弧が必要であることを前提としているため、エラーメッセージが表示されます。

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

+0

はちょうどそれが実際のResponse.Write(;)HTML_ENCODE(Model.Message); 'に変換明確にするために、それはだとして' '<%: %>'ない '<%= %>' – Basic

+0

@Basiclife:はい、それは正しいですが、それはここで、「基本的にです"それは本当に問題に関連していないから来る。 – Guffa

2

Model.Messageの後にセミコロンを置く必要はないと思います。

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

0

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

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

例:フォームの場合、モデルは入力ごとにフィールドを持ちます。テーブルの場合、IEnumerable<SomeRowClass>などがあります。

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

デザイナーがコントローラを書き、デザイナーがビューを書き、デザイナーが「X、Y、Zを知る必要がある」というデザイナーがモデルに入ったものをコラボレーションするということです。それらをモデルに追加し、必要に応じてフィールドに値を設定します。

他の回答と同様に、Model.Messageの後のセミコロンは余分です。

0

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

関連する問題