背景:我使用ASPX文件和webforms(作为我的日常工作)但从未真正使用 Razor (。cshtml)。
我正在尝试使用Owin.Security.Providers
创建一个登录 Steam 的网站。
当我执行Install-Package Install-Package Owin.Security.Providers
并从https://steamcommunity.com/dev/apikey实施API时,我注意到相应的按钮是在 Razor 中实现的,如下所示。
using (Html.BeginForm("ExternalLogin", "Account", new { ReturnUrl = Model.ReturnUrl })) {
@Html.AntiForgeryToken()
<div id="socialLoginList">
<p>
@foreach (AuthenticationDescription p in loginProviders) {
<button type="submit" class="btn btn-default" id="@p.AuthenticationType" name="provider" value="@p.AuthenticationType" title="Log in using your @p.Caption account">@p.AuthenticationType</button>
}
</p>
</div>
问题:
有没有办法在ASPX页面而不是在CSHTML页面中获得相同的功能?
以下代码是否为按钮提供了登录链接?
using (Html.BeginForm("ExternalLogin", "Account", new { ReturnUrl = Model.ReturnUrl })) {
答案 0 :(得分:1)
Razor可以通过trivia方式转换为ASPX语法。
如果您在ASP.NET MVC上下文中使用ASPX语法,则可以使用Html
帮助程序,就像在Razor中一样:
<% using (Html.BeginForm("ExternalLogin", "Account", new { ReturnUrl = Model.ReturnUrl })) { %>
<%= Html.AntiForgeryToken %>
<div id="socialLoginList">
<p>
<% foreach( AuthenticationDescription p in loginProviders ) { %>
<button type="submit" class="btn btn-default" id="<%= p.AuthenticationType %>" name="provider" value="<%= p.AuthenticationType %>" title="Log in using your <%= p.Caption %> account"><%= p.AuthenticationType %></button>
<% } // foreach %>
</p>
</div>
<% } // using %>
(注意:对于应该是HTML编码的输出,请使用<%:
而不是<%=
。我不知道输出中的哪些字符串应该编码。
如果您在非MVC上下文中使用它,则需要使用文字HTML替换Html
帮助程序。 不要使用WebControls (如<asp:Form>
),因为您失去了对标记的控制权: