T4MVC - Действия с привязкой к модели - как получить полностью квалифицированную строго типизированную строку URL-адреса другому контроллеру?

Я запускаю Visual Studio 2012 RC с битами .Net 4.5 с T4MVC.

Я использую метод действия для моего AccountController, и я хочу сгенерировать полный URL-адрес для другого контроллера, который выглядит примерно так;

public partial class ConfirmEmailController : Controller
{
    // ...

    [AllowAnonymous]
    [HttpPost]
    public virtual ActionResult Confirm(ConfirmEmailModel model)
    {
         //...
    }
    // ...
}

Итак, я хочу вызвать функцию (находясь внутри моего метода действия AccountController, который создает ссылку, которую я могу отправить по электронной почте;

    private string GetEmailConfirmationUrl(MembershipUser aUser, bool confirm)
    {
        string code = aUser.ProviderUserKey.ToString();
        var model = new ConfirmEmailModel() { Code = code, Confirm = confirm };

        Url.Action(MVC.ConfirmEmail.Confirm(model); // very typesafe but doesn't work
    }

Однако, как и у других участников, строго типизированный T4MVC Action / ActionLink, я просто получаю имя класса модели "www.Models.ConfirmEmail"

Я использую последние версии T4MVC, но не похоже, что с тех пор здесь что-то изменилось.

Я не обязательно хочу иметь возможность конструировать и передавать такие модели, все, что я хочу, - это создать полный URL-адрес строго типизированным и типобезопасным способом.

Я знаю, что это работает;

Url.Action(MVC.ConfirmEmail.Confirm().AddRouteValues(new ConfirmEmailModel() { Code = code, Confirm = confirm }));

Но это бесполезно, потому что это не подтверждает, что параметры модели, которые я передаю, действительны даже для этого контроллера, я мог бы передать их любому контроллеру (я уже сделал эту ошибку).

Есть ли другой способ добиться этого, или я должен добавить список параметров в свое действие Confirm()?


person cirrus    schedule 15.06.2012    source источник
comment
Совершенно загадочно, что это не должно поддерживаться таким популярным проектом, как T4MVC.   -  person John    schedule 04.11.2014


Ответы (1)


Я не думаю, что ты сможешь это сделать.

Если вы посмотрите на код, сгенерированный T4MVC, вы увидите, что нет ничего, что могло бы «отменить» логику привязки вашей модели. В основном T4MVC не знает, что используется связка модели.

Изменить:

Вы можете использовать T4MVC для генерации URL-адреса, но вам нужно использовать перегрузку, сгенерированную T4. Так что в вашем случае просто

Url.Action(MVC.ConfirmEmail.Confirm());

Этого достаточно для создания URL. Фактическое значение параметра будет создано во время выполнения на основе привязки вашей модели.

person Jakub Konecki    schedule 15.06.2012
comment
Справедливо. Я не обязательно хочу делать это специально. Все, что я действительно хочу сделать (согласно заголовку), - это сгенерировать полный URL-адрес из строго типизированного кода. Я был бы рад любому решению, которое позволит мне это сделать. - person cirrus; 17.06.2012
comment
Я не понимаю редактирования. Url.Action(MVC.ConfirmEmail.Confirm()); - это в значительной степени то, что написал @cirrus, за исключением параметра, поэтому он вообще не компилируется. Проблема в параметре. - person John; 04.11.2014