2009-08-13 23 views
1

数週間後、私はasp.net mvcの周りに頭を持ち、2つのwebformsサイトを変換しました。ポートだけでなく、モデル、コントローラ、およびビューコードを別々にするためにリファクタリングをいくつか行いました。私は正しくasp.net mvcを使用していますか?

私はまだ改善が必要だと思う1つのパターンは、次のとおりです。私はこれらの匂いがどれほど悪いかわからないので、これらの項目に関する助言やフィードバックをしたいと思います。

  1. 問題:あなたのコントローラ内のHTMLレンダリングの知識 - あなたのビジネスロジックは、HTMLの束を生成し、ViewDataをにそれを突き出す持っているし、その後、あなたのビューは、このようなコードの束も持っているのは非常に簡単:

    `<% = Html.Encode(ViewDataを[ "タイトル"])%>

    ` <% = Html.Encode(ViewDataを[ "コンテンツ"])%>

    `<% = Htmlの.Encode(ViewData ["Footer"])%>

これに最適な解決策は何ですか?明らかに私の見解ではこの論理を避けたいですか?私は、クライアントにデータをプッシュし、HTMLHelperクラスでこの "レンダリング"ロジックを持っているべきですか?

HTMLテーブルを構築するコントローラクラスで、このようなコードになります。 。

Stringbuilder gridBuilder = new StringBuilder(); 

     while (index < objDS.Count) 
     { 
      // start of table row 
      gridBuilder.AppendLine("<tr align=\"center\">"); 
      for (int column = 0; column < numberOfColumns; column++) 
      { 
       if (index < objDS.Count) 
       { 
        int record = (index) + ((objDS.CurrentPageIndex) * 12); 
        DataRow dr = photosDataSet.Tables[0].Rows[record]; 
        gridBuilder.AppendLine("<td width=\"187.5\" valign=\"top\">"); 
        int pictureNumber = Convert.ToInt32(dr.ItemArray[0].ToString()); 
        string picnum = pictureNumber.ToString().PadLeft(3, '0'); 
        int picNumberlink = pictureNumber - 1; 
        string image = "/pics/" + AlbumName + "/Thumbnails/" + AlbumName + "-pic" + picnum + ".jpg"; 
        gridBuilder.AppendLine("<a id=\"picLinks_" + record + "\" class=\"picLinks\" href=''><img class=\"instant ishadow50\" src=\"" + image + "\"></img></a>"); 
        gridBuilder.AppendLine("<br/>"); 
        gridBuilder.AppendLine(dr.ItemArray[1].ToString()); 
        gridBuilder.AppendLine("</td>"); 
       } 
       index++; 
      } 
      gridBuilder.AppendLine("</tr>"); 
     } 
     gridBuilder.AppendLine("</table>"); 

     ViewData["Content"] = gridBuilder.ToString(); 

答えて

2

答えは - あなたのコントローラにhtmlを持ってはいけません。 MvcContribからグリッドを使用することができない場合は、DataTableを受け取り、オーバーライドされたToStringメソッドまたは呼び出す特定のメソッドでhtmlを出力するクラスを作成する必要があります。

など、それを使用します。

<%= new MyGridGenerator(DataTable ..) %> 
1

私の意見では、HTMLエンコーディングはHTMLに固有のものなので、ビューで実行する必要があります。このエンコーディングをコントローラーに移動すると、ビューを使用する大きな利点が取り除かれます。書式設定ロジックをビジネスロジックから分離することです。

+0

私の問題は、私はHTMLについて知っているコントローラ内のコードを持っているということです。私は質問を更新する – leora

1

HTMLテーブルをレンダリングする場合はGridコンポーネントをMvcContribからお勧めします。

関連する問題