4

私はここで2つのことをしようとしています:

1. (デフォルトの)UserProfile テーブルに電子メール フィールドを追加します。魅力のように機能します。ユーザーは、ユーザー名と電子メールの両方を登録できます。

2.ユーザー名の代わりに電子メールを使用するようにログインを変更します。これも魅力のように機能します。

これが問題です。上記は、それらを分離した場合にのみ機能します。両方を使用するとすぐに、登録プロセスは次のエラーメッセージで失敗します。

Cannot insert the value NULL into column 'UserName', table 'opdb.dbo.UserProfile'; column does not allow nulls. INSERT fails.

WebSecurity.CreateUserAndAccount(model.UserName, model.Password, new { Email = model.Email 
}); 
WebSecurity.Login(model.Email, model.Password);

ここにあるガイドに多かれ少なかれ従ってい ます。コメントセクションで、他の人が同じ問題を抱えているのを見ますが、解決策は、返信に記載されているように、UserNameフィールドをnullを許可するように設定しないことです.

奇妙なことに、両方を一緒に使用しない限り、すべてが機能します。何か案は?これは私を夢中にさせます!

前もって感謝します

編集:データベース内の列の順序でしょうか? 識別に使用されるフィールドは、テーブルの最初の列である必要がありますか? では、テーブルの最初の列にする必要がある ident として電子メールが必要な場合は?

4

2 に答える 2

2

その結果、名前空間 WebMatrix.WebData 参照の WebSecurity が正しく機能しないため、Andy Browns の提案が機能するかどうかはわかりません。彼らは具体的に UserName フィールドを見て、アクションを実行しています。間違っているかもしれませんが、それが私の認識です。別のフィールドが必要な場合は、別のユーザー名フィールド (名前) を作成し、独自のコードを実行してそれを更新し、ユーザーに反映させます。

UserName を User Email に名前変更した登録ビューを設定することにしました

<li>
@Html.Label("Email Address:")
@Html.TextBoxFor(m => m.UserName)
</li>

次に、ログインおよび登録モデルでは、次を使用して電子メール形式として入力されたユーザー名が必要でした:

[Required]
[DataType(DataType.EmailAddress)]
[EmailAddress]
[Display(Name = "UserEmail")]
public string UserName { get; set; } 

単純すぎるかもしれませんが、私にとってはうまくいきます。

于 2013-09-07T20:17:52.577 に答える