私は私を絶対に夢中にさせている奇妙な問題を抱えています。
それがうまく機能した後、それは突然の次のエラーで始まりました:
Validation type names in unobtrusive client validation rules must be unique. The following
validation type was seen more than once: required
このエラーは、Area / Admin/WebSitesのコントローラーの1つで最初に発生しました。しかし、認証Cookieの有効期限が切れるとすぐに、ログインページとEditFor(m => m.UserName)行でCookieを取得しました。私は自分のコードをくまなく調べて、リモートで同じ名前が付けられている可能性のあるモデルのどこかに重複するRequired属性を探しました。
LoginViewModelにアクセスし、UserNameから[Required]を削除しました。エラーはEditFor(m => m.Password)に移動しました。「パスワードから必須」も削除しました。エラーによりRememberMe行が移動しましたが、そのメンバーには必須属性がまったくありませんでした。実際、他のクラスでは、RememberMeという名前のリモートでさえ他に何もありません。
さて、私はあきらめて、webSiteプロジェクトを最初から再構築し始めました(ソリューションの残りの部分ではありません)が、それでも同じ結果になりました。
必死になって、ソリューション全体を最初から再構築し、*。csファイルをコピーして、どこかに重複する参照があると考えてすべての参照を手動で再読み込みします。
MVC4プロジェクトをもう一度構築する段階に到達したら、何が起こっているのかを理解できるかどうかを確認するために段階的に実行しました。エリアの追加を開始するまでは、正常に動作し、読み込みが完了し、ログインなどが可能でした。最初は、Areasフォルダーをプロジェクトに直接コピーしました(名前空間名はすべて同じなので、これで問題ないはずです)。しかし、確かに私はこのエラーを正しい方法で取得し始めました。
さて、最初に作成したのとは逆の順序でコントローラーを削除し始めました。Areasフォルダーを完全に削除するまで、サイトは通常の状態に戻りませんでした。
これをテストすると、プロジェクトにAreasフォルダーを作成するとすぐに、壊れてしまいます。GUIを使用して新しいエリアを作成した場合も同じです。
さて、製図板に戻ります。MVC4プロジェクトを最初から再作成しましたが、今回はソリューションの外部で、この時点でソリューションにとって重要な2つの重要なNuGetパッケージ(Ninject.MVC3とMvc3ControlsKit(3と4の両方に対応するnugetからのもの)のみを取り込みました)。さて、すべてがようやくうまく機能し始めます。この時点で、私のJqueryはバージョン1.7.2であり、MVC4に付属するデフォルトのJqueryUIを備えています。
ある時点で、jqueryダイアログが閉じないという問題が発生したため、JQuery1.8.2とNuGetの最新のJQueryUIをインストールしました。管理エリアに完全に空白のコントローラーを追加し、このエラーが再び表示されるまで、すべてが正常に機能しました。
さて、再び製図板に戻ります...私は段階的にそれを再構築し、各ポイントでテストしました。今回は最新のJQueryグッズをインストールしていません。すべてが再び正常に機能し始めます。新しいコントローラーを追加し、次に2つ追加しました。さて、このバージョンの有効なコピーを作成し、取っておきます。JqueryとJqueryUIを最新バージョンに更新しました。そのエリアに新しいコントローラーを追加しても、それでも私の完全な欲求不満に対応できます。
私のエンティティはすべてFluentAPIを使用して、DataAnnotatian属性をまったく使用せずにエンティティを構成しています。何か案は?私はそれが再び壊れるのを待ち続けます。
編集:
これが私がちょうど理解したいくつかのより多くの情報です。ログイン部分ビューのこのコード行でエラーが発生しています。私のモデルは
public class LoginViewModel
{
[Required]
[Display(Name = "User Name")]
public string UserName { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[Display(Name = "Remember me?")]
public bool RememberMe { get; set; }
/// <summary>
/// Role
/// </summary>
public string Role { get; set; }
}
ビューでこの行を呼び出すと、エラーが発生します。
@Html.TextBoxFor(m => m.UserName)
この時点で、Ninjectが引き継ぎ、Ninject.Web.Mvc.Validation.NinjectDataAnnotationsModelValidatorProviderクラスの次のメソッドから戻った直後に、前述の控えめな検証エラーが発生します。さらに、このメソッドが必要な検証を正しく識別し、それらを注入したことを確認しました。このメソッドでは例外は発生していませんが、その後発生しています。
protected override IEnumerable<ModelValidator> GetValidators(ModelMetadata metadata, ControllerContext context, IEnumerable<Attribute> attributes)
{
var validators = base.GetValidators(metadata, context, attributes);
foreach (var modelValidator in validators.OfType<DataAnnotationsModelValidator>())
{
var attribute = this.getAttributeMethodInfo.Invoke(modelValidator, new object[0]);
this.kernel.Inject(attribute);
}
return validators;
}