C# MVC4 oAuth导致空值异常

C# MVC4 oAuth导致空值异常,c#,asp.net-mvc-4,oauth,C#,Asp.net Mvc 4,Oauth,我正在尝试允许用户使用他们的Facebook、Twitter、Google或Microsoft帐户登录我的MVC4站点。页面加载正常,但当单击其中一个按钮以使用这些服务之一进行身份验证时,我得到一个错误 System.ArgumentNullException:值不能为null 由于Provider为空,该错误在帐户控制器中引用了此行代码 OAuthWebSecurity.RequestAuthentication(Provider, ReturnUrl); 这行代码属于此控制器操作

我正在尝试允许用户使用他们的Facebook、Twitter、Google或Microsoft帐户登录我的MVC4站点。页面加载正常,但当单击其中一个按钮以使用这些服务之一进行身份验证时,我得到一个错误

System.ArgumentNullException:值不能为null

由于
Provider
为空,该错误在帐户控制器中引用了此行代码

OAuthWebSecurity.RequestAuthentication(Provider, ReturnUrl);
这行代码属于此控制器操作

    internal class ExternalLoginResult : ActionResult
    {
        public ExternalLoginResult(string provider, string returnUrl)
        {
            Provider = provider;
            ReturnUrl = returnUrl;
        }

        public string Provider { get; private set; }
        public string ReturnUrl { get; private set; }

        public override void ExecuteResult(ControllerContext context)
        {
            OAuthWebSecurity.RequestAuthentication(Provider, ReturnUrl);
        }
    }
当页面加载时,每个按钮的值将按预期设置。已编译页面的页面源显示名称和值集。在本例中,对于twitter

    <div class="authprovider">
        <input type="image" name="Provider" value="twitter" alt="Sign in using Twitter" src="/Images/twitter.png" title="Twitter" />
    </div>
在名为_ExternalLoginsListPartial的部分视图中,用于输出按钮的代码如下所示

OAuthWebSecurity.RegisterTwitterClient(
    consumerKey: "*Hidden*",
    consumerSecret: "*Hidden*",
    displayName:"Twitter",
    extraData:new Dictionary<string, object>{{"Icon","/Images/twitter.png"}});
    @foreach (AuthenticationClientData p in Model)
    {
        <div class="authprovider">
            <input type="image" name="Provider" value="@p.AuthenticationClient.ProviderName" alt="Sign in using @p.DisplayName" src="@p.ExtraData["Icon"].ToString()" title="@p.DisplayName" />
        </div>

    }
@foreach(模型中的AuthenticationClientData p)
{
}
我已将输入类型更改为
image
,以允许使用image按钮。默认情况下,它的类型为
submit
。所有4个扩展登录选项都会发生此错误。希望有人碰到它,这让我至今挠头

[编辑15:41]


将按钮改回submit似乎没有问题,但我真的不想要一个可怕的按钮而不是图像。

好吧,结果是

<div class="authprovider">
    <button type="submit" name="Provider" value="@p.AuthenticationClient.ProviderName"><img alt="Sign in using @p.DisplayName" src="@p.ExtraData["Icon"].ToString()" title="@p.DisplayName"/></button>
</div>
.authprovider button {
    background-color: #fff;
    border: none;
}