С помощью чего сделать HTML документ? asp.net core

172
21 июля 2019, 04:00

нужно генерировать HTML страницу на сервере по заданным данным, что бы после отправить человеку email с прикреплённой html формой

писать тупо строкой не тем => типа того:

может есть какие билдеры? (ASP.NET Core)

(что-то вроде HtmlTextWriter, как в framework)

Answer 1

Обычно принято делать это в представлениях (view).

Т.е. у вас есть контроллер, который получает данные:

public class BookController : Controller
{
    public BookController()
    {
        this.Books = new List<Book>()
        {
            new Book { Id = 1, Title = "книга 1" },
            new Book { Id = 2, Title= "книга 2" },
        };
    }
    public List<Book> Books { get; }
    public async Task<IActionResult> GetAllBooks()
    {
        var model = this.Books; // TODO: Read from db
        return this.View(model);
    }
}

И есть некоторое представление, в котором отображаются данные нужным способом:

@model IEnumerable<Book>
@{
    ViewBag.Title = "Все книги";
}
<h2>@ViewBag.Title</h2>
<table class="table">
    <thead>
        <tr>
            <td>id</td>
            <td>title</td>
        </tr>
    </thead>
    <tbody>
        @foreach (var book in Model)
        {
            <tr>
                <td>@book.Id</td>
                <td>@book.Title</td>
            </tr>
        }
    </tbody>
</table>

Вот и всё. Почитайте про подход mvc (model-view-controller), это вам поможет.

При этом повторяющийся код всех страниц (header-footer и т.п.) принято выносить в единый файл _Layout.cshtml (а в контроллере прописывают только саму серёдку страницы).

Начните изучение с какого-нибудь букваря по asp.net, например этого.

Также, в asp.net core возможен другой подход - Razor Pages. Суть примерно такая же, только сделано немного иначе: у вас есть файл AllBooks.cshtml с разметкой и файл AllBooks.cshtml.cs с управляющим кодом.

Пример файла AllBooks.cshtml.cs:

public class GetAllBooksModel : PageModel
{
    public GetAllBooksModel()
    {
        this.Books = new List<Book>()
        {
            new Book { Id = 1, Title = "книга 1" },
            new Book { Id = 2, Title= "книга 2" },
        };
    }
    public List<Book> Books { get; }
    public void OnGet()
    {
    }
}

И практически такой же файл AllBooks.cshtml:

@page
@model WebApplication1.Pages.GetAllBooksModel
@{
    ViewBag.Title = "Все книги";
}
<h2>@ViewBag.Title</h2>
<table class="table">
    <thead>
        <tr>
            <td>id</td>
            <td>title</td>
        </tr>
    </thead>
    <tbody>
        @foreach (var book in Model.Books)
        {
            <tr>
                <td>@book.Id</td>
                <td>@book.Title</td>
            </tr>
        }
    </tbody>
</table>

(Здесь так же генерируется только сердевина страницы, а остальная обвязка записана в _Layout)

А вот так может выглядеть /View/Shared/_Layout.cshtml (обратите внимание на директиву, которая подключает генерацию содержимого страницы, которое вы пишете в контроллерах или razor pages):

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"] - WebApp1</title>
</head>
<body>
    <div class="container body-content">
        @RenderBody()
    </div>
    <div class="container-fluid">
        <footer>
            <div class="row">
                <div class="col-6 col-sm-6">
                    <p>&copy; 2018 - WebApp1</p>
                </div>
            </div>
        </footer>
    </div>
</body>
</html>
Answer 2

Вы можете использовать Razor отдельно от AST.NET MVC, но придется написать ~50 строк, чтобы его настроить. Посмотрите сниипет в ответе на похожий вопрос: https://stackoverflow.com/questions/38247080/using-razor-outside-of-mvc-in-net-core/47756437#47756437

READ ALSO
Как сделать движение объекта вверх на определённое количество секунд при срабатывании триггера?

Как сделать движение объекта вверх на определённое количество секунд при срабатывании триггера?

Пробовал уже многие варианты, но ничего не работаетВот последняя догадка:

176
Как использовать интервалы

Как использовать интервалы

Надо сделать интервал из которого программа будет сама задавать значение и потом чтобы при проверке если не подошло значение ,то программа...

196
аналог tcpListener.Pending() в Socket C#

аналог tcpListener.Pending() в Socket C#

Нужен аналогический метод к tcpListenerPending() но в классе Socket

161
Нажатие клавиш в браузере (selenium)

Нажатие клавиш в браузере (selenium)

Использую Selenium для прохождения регистрации на сайте, имеется кнопка(вот вся информация по ней):

182