我的问题类似于这篇文章。 MVC4 oAuth causing null value exception
但是,我没有将按钮更改为图像输入。调试时,每个循环都会显示值,这些循环会为OAuth提供程序创建按钮。这里:
@model ICollection<AuthenticationClientData>
@if (Model.Count == 0)
{
<div class="message-info">
<p>There are no external authentication services configured. See <a href="http://go.microsoft.com/fwlink/?LinkId=252166">this article</a>
for details on setting up this ASP.NET application to support logging in via external services.</p>
</div>
}
else
{
using (Html.BeginForm("ExternalLogin", "Account", new { ReturnUrl = ViewBag.ReturnUrl }))
{
@Html.AntiForgeryToken()
<fieldset id="socialLoginList">
<legend>Log in using another service</legend>
<p>
@foreach (AuthenticationClientData p in Model)
{
<button type="submit" name="provider" value="@p.AuthenticationClient.ProviderName" title="Log in using your @p.DisplayName account">@p.DisplayName</button>
}
</p>
</fieldset>
}
}
是否有任何其他情况会导致提供程序返回null并抛出错误?
编辑:事实上,经过一些调试,我发现提供商字符串没有在帐户控制器中回传到此方法
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult ExternalLogin(string provider, string returnUrl)
{
return new ExternalLoginResult(provider, Url.Action("ExternalLoginCallback", new { ReturnUrl = returnUrl }));
}
有人知道为什么或如何发生这种情况?如果您需要更多代码,请询问。
编辑:这是视图中存在的值的图像,但在帖子中缺失。任何建议都是最受欢迎的。
编辑:添加了登录页面表单的整个视图。提交按钮时未提交提供者值,这在fiddler post
中得到确认编辑:如果我在按钮上添加一个类,然后在名为provider的表单中添加一个隐藏字段。然后我可以使用jquery设置它的值。然后将该值与表单一起提交,并确定它有效。
<input type="hidden" value="" name="provider" id="provider" />
@foreach(.... etc
<button class="test" type="submit" name="provider" value="@p.AuthenticationClient.ProviderName" title="Log in using your @p.DisplayName account">@p.DisplayName</button>
然后
<script>
$(function () {
$('.test').click(function () {
alert($(this).val());
$('#provider').val($(this).val());
return true;
});
});
</script>
如果有人能告诉我为什么会这样,以及如何正确地解决这个问题会很棒!
答案 0 :(得分:0)
在表单提交上执行的任何错误客户端脚本或禁用提交按钮的脚本(在您的情况下为外部提供程序按钮)将导致空值。确保将ExternalLogin提供者表单发布到其ActionResult,没有任何例外。