在默认的ASP.NET MVC 5 Web项目中,“Login”视图(“Login.cshtml”)有一个BeginForm
调用,如下所示:
@using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
我正在尝试将所有ActionLink
,BeginForm
(等)调用转换为使用T4MVC,因此我将其更改为:
@using (Html.BeginForm(MVC.Account.Login().AddRouteValue("ReturnUrl", (string)ViewBag.ReturnUrl), FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
......工作正常。
但是,“ExternalLoginConfirmation.cshtml”中有另一种形式,它的开头是这样的:
@using (Html.BeginForm("ExternalLoginConfirmation", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
我尝试使用相同的方法:
@using (Html.BeginForm(MVC.Account.ExternalLoginConfirmation().AddRouteValue(...)
...但MVC.Account.ExternalLoginConfirmation
返回的对象没有AddRouteValue
方法。
我认为这是因为ExternalLoginConfirmation
是异步操作方法,实际上返回的是Task<T>
,而不仅仅是T
。
我有什么方法可以让它与T4MVC一起工作,或者我只是需要单独留下这个? (我知道我可以使用MVC.Account.ActionNames.ExternalLoginConfirmation
和MVC.Account.Name
替换魔术字符串,但是能够使用帮助器会很好。
答案 0 :(得分:1)
this thread中介绍了这一点。基本上,尝试:
MVC.Account.ExternalLoginConfirmation().Result.AddRouteValue(...)