ASP.NET MVC 3 Html助手无法识别

时间:2011-07-01 16:09:42

标签: c# asp.net html asp.net-mvc 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>

任何人都知道如何解决它?

6 个答案:

答案 0 :(得分:5)

编写Html助手的方法是 在帮助器中返回字符串。

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

答案 1 :(得分:2)

您需要导入命名空间:

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

答案 2 :(得分: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>
}

答案 3 :(得分:1)

确保它位于您的web.config文件中(可能位于根目录以及〜/ Views文件夹中):

<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, ...

答案 4 :(得分:0)

这是asp.net MVC,MVC表示模型(业务逻辑),View(表示层或客户端看到的),以及控制器,它与请求一起操作。为什么在View中使用Model。在Model类中使用sql进行操作,在控制器中调用它,然后通过ViewData发送到View是正确的。没有理由以这种方式使用asp.net MVC。

答案 5 :(得分:0)

在Views目录中应该有一个Web.config。您只需要将命名空间添加到帮助程序