ASP.NET MVC: невозможно распечатать данные из DataTable на HTML-странице - PullRequest
0 голосов
/ 06 июня 2019

У меня есть база данных, состоящая из таблицы, информацию которой я хочу распечатать в браузере. Итак, что я сделал:

In _Layout.cshtml:
       <li class="nav-item">
                <a class="nav-link" href=@Url.Action("ViewPage1","Billing")>Records</a>
       </li>

Страница ViewPage1.cshtml содержит:

<body>
<div>
    <a href=@Url.Action("Record_Page_Load", "Billing")>Print Records</a>
</div>
</body>

Который затем вызывает функции контроллера:

public DataTable GetRecords()
    {
        string constr = ConfigurationManager.ConnectionStrings["BOConnectionString"].ConnectionString;
        using (SqlConnection con = new SqlConnection(constr))
        {
            using (SqlCommand cmd = new SqlCommand("SELECT TOP 10 * FROM Article"))
            {
                using (SqlDataAdapter sda = new SqlDataAdapter())
                {
                    cmd.Connection = con;
                    sda.SelectCommand = cmd;
                    using (DataTable dt = new DataTable())
                    {
                        sda.Fill(dt);

                        return dt;
                    }
                }
            }
        }
    }


    public void Record_Page_Load()
    {

        DataTable dt = this.GetRecords();

        StringBuilder html = new StringBuilder();
        //html.Append("<html><body>");


        html.Append("<table border = '1'>");
        html.Append("<tr>");

        foreach (DataColumn column in dt.Columns)
        {
            html.Append("<th>");
            html.Append(column.ColumnName);
            html.Append("</th>");
        }

        html.Append("</tr>");

        foreach (DataRow row in dt.Rows)
        {
            html.Append("<tr>");
            foreach (DataColumn column in dt.Columns)
            {
                html.Append("<td>");
                html.Append(row[column.ColumnName]);
                html.Append("</td>");
                Debug.Print(Convert.ToString(row[column.ColumnName]));
            }

            html.Append("</tr>");
        }

        html.Append("/table");

        //html.Append("</body></html>");
    }

    public ActionResult ViewPage1()
    {
        return View("ViewPage1");
    }

После нажатия кнопки «Печать записей» ничего не печатается.

Чтобы убедиться, что DataTable действительно заполняется, я попытался напечатать записи в окне вывода Visual Studio. Данные печатались. Итак, что здесь не так?

Ответы [ 2 ]

1 голос
/ 06 июня 2019

Вы прекрасно создаете HTML-таблицу, как я могу сказать, но вы не выводите ее.попробуйте изменить контекст, чтобы перейти на страницу, используя context.HttpContext.Response.Write(html);

0 голосов
/ 06 июня 2019

Как я вижу, есть несколько ошибок.

  1. В вашем методе Record_Page_Load() вторая итерация цикла, которую вы начинаете с </tr>, как показано ниже, которая должна быть открытием <tr>

    foreach (DataRow row in dt.Rows)
    {
        html.Append("</tr>");           // this one
        foreach (DataColumn column in dt.Columns)
        {
    
  2. Вы не выводите контент в потоке ответов вообще, поэтому в браузере ничего не отображается.

    html.Append("/table");
    Response.Write(html.ToString()); // Write the content to response stream
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...