2011-07-01 6 views
0

何かの理由で私のHTMLヘルパーが認識されません。ASP.NET MVC 3 HTMLヘルパーが認識されない

@using System.Data.SqlClient 
@using System.Data 
<!DOCTYPE html> 
<html> 
<head> 
    <title>Site Visits</title> 
</head> 
<body> 
    <div> 
     @{ 
      public string GetSiteVisits() 
      { 
       DataTable dt = new DataTable(); 
       SqlDataAdapter sda = new SqlDataAdapter(
        "SELECT numVisits FROM tblSiteVisits WHERE IPAddress='" + Request.UserHostAddress + "'", 
        new SqlConnection("Data Source=*****;Initial Catalog=*****;Persist Security Info=True;User ID=*****;Password=*****;MultipleActiveResultSets=True")); 

       sda.Fill(dt); 

       string table = "<table><tr>"; 

       foreach (DataColumn dc in dt.Columns) 
       { 
         table += "<th>" + dc.ColumnName + "</th>"; 
       } 

       table += "</tr>"; 

       foreach (DataRow dr in dt.Rows) 
       { 
        table += "<tr>"; 

        foreach (Object o in dr.ItemArray) 
        { 
         table += "<td>" + o.ToString() + "</td>"; 
        } 

        table += "</tr>"; 
       } 

       table += "</table>"; 

       return table; 
      } 
     } 
     <div> 
      @Html.Raw(GetSiteVisits()) 
     </div> 
    </div> 
</body> 
</html> 

誰でもどのように修正するのですか?

+16

に名前空間を追加する必要がありますか? – 48klocs

+0

私はただ修正する必要があります。 –

+0

パターンに従うつもりがない場合は、なぜMVCを使用していますか? – sellmeadog

答えて

2

あなたの名前空間をインポートする必要があります。HTMLヘルパーを書くため

@using System.Data.SqlClient 
@using System.Data 
@using Mine.MyHtmlHelper.MyNameSpace // Here!! 
+0

これは修正されません –

5

方法は、ヘルパーに は、文字列を返すことです。

<html> 
     <body> 
      <div> 
       @GetSiteVisits() 
     </div>  
     </body> 
    </html> 
    @helper GetSiteVisits() 
    { 
     @Html.Raw("hello"); 
    } 
1

これはあなたのweb.configファイル(おそらくルートでだけでなく、〜/ビュー]フォルダ内)になっていることを確認します:

<system.web> 
    <compilation debug = "true" targetFramework = "4.0"> 
     <assemblies> 
      <add assembly = "System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
      <add assembly = "System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
      <add assembly = "System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
      <add assembly = "System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
      <add assembly = "System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     </assemblies> 
    </compilation> 
</system.web> 

重要な行は本当にただSystem.Web.Mvc, ...

2

ですGetSiteVisits()関数は、ビューではなくコントローラになければなりません。メソッドが生成する(データベースから読み込む)データは、ビューに渡されたビューモデルに入ります。

モデル

public class IPVisits 
{ 
    public string IPAddress { get; set; } 
    public int NumVisits { get; set; } 
} 

ビューモデル

public class SiteVisitsViewModel 
{ 
    public List<IPVists> Visits { get; set; } 
} 

コントローラ

// SiteVisits method only 
public ActionResult SiteVisits(string id) 
{ 
    // Get the data for the UserHostAddress 
    list = Repository.GetTheDataInListForm(id); 
    return View(list); 
} 

ビュー

foreach(var d in Model.Visits) 
{ 
    <tr> 
     <td>@d.IPAddress</td> 
     <td>@d.NumVisits</td> 
    </tr> 
} 
:ラフの擬似コードでは、このようなものでなければなりません
0

これはasp.net MVC、MVCはモデル(ビジネスロジック)、ビュー(プレゼンテーションレイヤー、またはクライアントが参照するもの)、コントローラー(リクエストとともに動作する)を意味します。 Model in Viewを使用する理由Modelクラスのsqlで操作を行い、コントローラでそれを呼び出し、ViewDataによってViewに送信するのは正しいでしょう。この方法でasp.net MVCを使用する理由はありません。

0

ViewsディレクトリにはWeb.configが必要です。あなただけなぜあなたはビューでモデルの仕事をしているあなたのヘルパー

関連する問題