【问题标题】:ASP.NET MVC 3 Html helper not recognizedASP.NET MVC 3 Html 帮助程序无法识别
【发布时间】:2011-07-01 16:09:42
【问题描述】:

由于某种原因,我的 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>

有人知道怎么解决吗?

【问题讨论】:

  • 为什么要在视图中执行模型工作?
  • 如果您不打算遵循该模式,为什么还要使用 MVC?
  • 使用前请先了解模式。这根本不是它的用途。
  • SO 的重点不是判断别人的代码,而是帮助修复它。这个问题还不错,不值得投票。
  • @jfar:没错。超临界的 cmets 和过度的投票会阻止新用户发布他们的代码。 @48klocs 的评论足以说明问题。

标签: c# asp.net html asp.net-mvc asp.net-mvc-3


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    你需要导入你的命名空间:

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

    【讨论】:

      【解决方案3】:

      函数 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>
      }
      

      【讨论】:

        【解决方案4】:

        确保它在您的 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, ...

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              猜你喜欢
              • 2014-06-04
              • 1970-01-01
              • 2010-09-07
              • 1970-01-01
              • 1970-01-01
              • 2012-04-11
              • 1970-01-01
              • 1970-01-01
              • 2014-12-06
              相关资源
              最近更新 更多