ASP.NET MVC 3 Html помощник не распознан - PullRequest
0 голосов
/ 01 июля 2011

Почему-то мой 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 ]

5 голосов
/ 01 июля 2011

Способ написания Html-помощников: В помощнике вернуть строку.

 <html>
      <body>
          <div>
              @GetSiteVisits()
         </div>    
      </body>
  </html>
  @helper GetSiteVisits()
  {
        @Html.Raw("hello");
  }
2 голосов
/ 01 июля 2011

Функция 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>
}
2 голосов
/ 01 июля 2011

Вам необходимо импортировать ваше пространство имен:

@using System.Data.SqlClient
@using System.Data
@using Mine.MyHtmlHelper.MyNameSpace // Here!!
1 голос
/ 01 июля 2011

Убедитесь, что это в вашем файле 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, ...

0 голосов
/ 14 июля 2011

В вашем каталоге Views должен быть файл Web.config.Вам просто нужно добавить пространство имен к вашему помощнику

0 голосов
/ 01 июля 2011

Это asp.net MVC, MVC означает Модель (бизнес-логика), Представление (уровень представления или то, что видит клиент) и контроллер, который работает с запросами.Почему вы используете модель в представлении.Будет правильно выполнить операцию с sql в классе Model, вызвать его в контроллере и отправить в View с помощью ViewData.Нет смысла использовать asp.net MVC таким образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...