Можно ли вызвать действие из XDocument XElement? - PullRequest
0 голосов
/ 25 июня 2019

Я создаю календарь с использованием XDocument в .NET Core и передаю его представлению в качестве помощника по тегам.

Я хотел бы сделать каждый день кликабельным и передавать дату каждого дня в качестве идентификатора для действия в другом контроллере. Возможно ли это с помощью XDocument или он может генерировать только сырой HTML?

В идеале я хотел бы сделать что-то вроде этого: @Html.ActionLink("", "ActionName", "ControllerName", new { date = d }) за каждый день.

Я попытался обернуть <div> с class="day" в <a> XAttribute с d в качестве href - который превращает день кликабельным и передает DateTime в URL, но я не могу работать как вызвать конкретное действие.

var startDate = monthStart.AddDays(-(int)monthStart.DayOfWeek);
var dates = Enumerable.Range(0, 42).Select(i => startDate.AddDays(i));

foreach (var d in dates)
{
    if (d.DayOfWeek == DayOfWeek.Sunday && d != startDate)
    {
        yield return new XElement("div",
            new XAttribute("class", "w-100"),
            String.Empty
        );
    }

    var mutedClasses = "d-none d-inline-block bg-light text-muted";
    yield return new XElement("div",
        new XAttribute("class", $"day col p-2 border-top-0 text-truncate {(d.Month != monthStart.Month ? mutedClasses : null)}"),
        new XElement("h6",
            new XAttribute("class", "row align-items-center"),
            new XElement("span",
                new XAttribute("class", "date col-1"),
                d.Day
            ),
            new XElement("span",
                new XAttribute("class", "col-1"),
                String.Empty
            )
        ),
        GetEventHtml(d)
    );
}

Ответы [ 2 ]

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

Мне удалось добиться этого с помощью LinkGenerator :

public class CalendarTagHelper : TagHelper
{
    private readonly LinkGenerator _linkGenerator;

    public CalendarTagHelper(LinkGenerator linkGenerator)
    {
        _linkGenerator = linkGenerator;
    } 

Затем вызовите этот метод в href a XElement, передавая d какпараметр:

    private string GetDayUrl(DateTime date)
    {
        return _linkGenerator.GetPathByAction("Day", "Home", values: {date = date});
    }
0 голосов
/ 25 июня 2019

Предполагая, что этот код находится в контроллере, вы можете установить href якоря, вызвав свойство Url controllerbase (реализуя IUrlHelper)

Например: new XAttribute ("href", Url ("ActionName"," ControllerName ", new {date = d}))

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