1

私の問題はこの投稿に似ています。 null値の例外を引き起こすMVC4 oAuth

ただし、ボタンを画像入力に変更していません。デバッグ時には、OAuth プロバイダーへのボタンを作成する for each ループに値がすべて存在します。ここ:

@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 }));
}

なぜ、またはどのようにこれが起こっているのか知っている人はいますか? さらにコードが必要な場合は、お問い合わせください。

編集:これは、ビューに存在する値の画像ですが、投稿にはありません。どんな提案でも大歓迎です。

ページの読み込み時に値が存在し、投稿で欠落しているブレークポイントの画像

編集:ログイン ページ フォームのビュー全体を追加しました。ボタンが送信されたときにプロバイダーの値が送信されません。これはフィドラーの投稿で確認されます

編集:ボタンにクラスを追加してから、プロバイダーと呼ばれるフォームに隠しフィールドを追加するとします。その後、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>

誰かがこれがなぜなのか、それを適切に修正する方法を教えてくれたら、それは素晴らしいことです!

4

1 に答える 1

0

フォームの送信時に実行される障害のあるクライアント スクリプト、または送信ボタン (この場合は外部プロバイダーのボタン) を無効にするスクリプトによって、null 値が発生します。ExternalLogin プロバイダー Form が例外なく ActionResult にポストされていることを確認してください。

于 2013-10-15T08:09:08.310 に答える