私はMVCアプリケーションで作業しており、役割を作成するフォームがあります。フォームからのデータはポスト作成アクションメソッドに正しく送信されます。このメソッドのシグネチャは、次のとおりID:新しく作成されたロールが見つからないのはなぜですか?
[HttpPost]
public async Task<ActionResult> Create([Bind(Include = "Name")] AppRole appRole, string [] PrivsChecked)
基本的に、これは、ユーザがフォーム上で選択として、役割を作成し、役割のために選択された特権を付けることを意味します。問題は、ロールに特権を割り当てる場合、新しく作成されたロールが見つからないということです。部分的なコードは以下の通りです:
public async Task<ActionResult> Create([Bind(Include = "Name")] AppRole appRole, string [] PrivsChecked)
{
if (PrivsChecked == null || PrivsChecked.Length == 0)
{
return Json(new { status = "error", message = "At least one privilege must be selected." });
}
else
{
if (ModelState.IsValid)
{
IdentityResult result
= await RoleManager.CreateAsync(new AppRole(appRole.Name));
if (result.Succeeded)
{
var approleToUpdate = db.IdentityRoles.Where(i => i.Id == appRole.Id).FirstOrDefault();
.
.
.
appRoleToUpdate
は、そのコードは、ロールの作成に成功したという意味に達しているが、少なくとも、nullに割り当てられています。次のようにコントローラでグローバル変数として宣言private AppIdentityDbContext db = new AppIdentityDbContext();
db
コンテキストは、次のとおりです
using IdentityDevelopment.Models;
using Microsoft.AspNet.Identity;
namespace IdentityDevelopment.Infrastructure
{
public class AppIdentityDbContext : IdentityDbContext<AppUser>
{
public AppIdentityDbContext() : base("IdentityDb") { }
static AppIdentityDbContext()
{
Database.SetInitializer<AppIdentityDbContext>(new IdentityDbInit());
}
public static AppIdentityDbContext Create()
{
return new AppIdentityDbContext();
}
public System.Data.Entity.DbSet<IdentityDevelopment.Models.AppRole> IdentityRoles { get; set; }
public System.Data.Entity.DbSet<IdentityDevelopment.Models.AppPrivilege> AppPrivileges { get; set; }
}
public class IdentityDbInit : NullDatabaseInitializer<AppIdentityDbContext>
{
}
}
奇妙なことは非常に類似した符号は、同様の編集方法に存在することであり、その場合に、appRoleToUpdate
が見つかります。新しく作成されたロールを同じメソッド内で見つけるには、何ができますか?これにはメソッドの非同期性がありますか?
ありがとうございます。
ありがとうございました。 – ITWorker