アカウント登録に単純なメンバーシップを使用しており、ユーザー登録時に追加のデータを保存する必要があります。依存性注入に Ninject を使用していますが、状態のリストを取得してドロップダウンリストに入力するリポジトリが既にあります。これをパラメーターとして他のコントローラーのコンストラクターに渡すことができ、正常に動作します。ただし、アカウント コントローラーに渡そうとすると null が返されます。明らかに、このコントローラーと他のコントローラーにはいくつかの違いがありますが、それが何であるかはわかりません。これは、リポジトリ パラメーターをコンストラクターに渡す方法です。
public class AccountController : Controller
{
private readonly IStateRepository sRepository;
public AccountController(IStateRepository sRepo)
{
sRepository = sRepo;
}
public ActionResult Register(RegisterModel model)
{
var stateQuery = sRepository.States.Select(m => new SelectListItem
{
Value = SqlFunctions.StringConvert((double)m.StateID),
Text = m.State1,
Selected = m.StateID.Equals(0)
});
model.StateList = stateQuery.AsEnumerable();
//more code to submit the registration
return View(model);
}
}
public class RegisterModel
{
[Required]
[Display(Name = "User name")]
public string UserName { get; set; }
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm password")]
[System.ComponentModel.DataAnnotations.Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
[Required]
[Display(Name = "Address")]
public string Address1 { get; set; }
[Display(Name = "Apt #")]
public string Address2 { get; set; }
[Required]
[Display(Name = "City")]
public string City { get; set; }
[Required]
[Display(Name = "State")]
public string State { get; set; }
[Required]
[Display(Name = "Zip")]
public string Zip { get; set; }
public string StateId { get; set; }
public IEnumerable<SelectListItem> StateList { get; set; }
}
登録ビューからのドロップダウンリスト
@Html.DropDownListFor(model => model.StateId, Model.StateList)
リポジトリ インターフェイス
public interface IStateRepository
{
IQueryable<State> States { get; }
}
リポジトリ
public class EFStateRepository : IStateRepository
{
//private EFDbContext context = new EFDbContext();
private Entities context = new Entities();
public IQueryable<State> States
{
get { return context.States; }
}
}
バインディング
ninjectKernel.Bind<IStateRepository>().To<EFStateRepository>();
他の誰かがこの問題を抱えていますか? 追加するために編集 - この問題を抱えていないが提案がある人々からも感謝の気持ちで助けられます。:-)