1

私は ASP.NET MVC に関しては初心者なので、次のシナリオで誰かがガイダンスを提供できれば幸いです。

サイトに登録できるメンバーには、クライアントとサプライヤーの 2 種類があるシナリオを考えます。

各タイプは、デフォルトのメンバー資格情報 (ユーザー名、電子メール、パスワード) とともに、個別のモデル/テーブル (つまり、クライアント モデル/テーブル、サプライヤー モデル/テーブル) に追加情報が格納されるメンバーになります。これに対する最善のアプローチがわからない。おすすめはありますか?

タイプごとに個別の登録ページがあり、登録が成功すると、それぞれの役割 (つまり、クライアント、サプライヤー) に追加されます。

これが私が遊んでいるクライアントモデルです。

public class Client
{
  // Will set this manually when creating a Client member
  [DatabaseGenerated(DatabaseGeneratedOption.None)]
  public int ClientId { get; set; }
  public string FirstName { get; set; }
  public string LastName { get; set; }
}

現在、クライアントの登録を処理するために、次のようにViewModelを作成しました

public class RegisterClient
{
  // Default ASP.NET MVC RegisterModel
  public RegisterModel RegisterModel { get; set; }
  public Client Client { get; set; }
}

以下は、ClientController の Register メソッドです。

public ActionResult Register()
{
  return View();
}

[HttpPost]
public ActionResult Register(RegisterClient model)
{
  if (ModelState.IsValid)
  {
    // Attempt to register the user
    MembershipCreateStatus createStatus;
    Membership.CreateUser(model.RegisterModel.UserName, model.RegisterModel.Password, model.RegisterModel.Email, null, null, true, null, out createStatus);

    if (createStatus == MembershipCreateStatus.Success)
    {
      FormsAuthentication.SetAuthCookie(model.RegisterModel.UserName, false /* createPersistentCookie */);
      Roles.AddUserToRole(model.RegisterModel.UserName, "Client");
      // Get UserId for Client <-> User relationship
      int id = int.Parse(Membership.GetUser(model.RegisterModel.UserName).ProviderUserKey.ToString());
      model.Client.UserProfileId = id;
      db.Clients.Add(model.Client);
      db.SaveChanges();
      return RedirectToAction("Index", "Home");
    }
    else
    {
      ModelState.AddModelError("", createStatus.ToString());
    }
  }
  // If we got this far, something failed, redisplay form
  return View(model);
}

これは適切なアプローチですか?私は、Client モデルに MembershipUser を継承させることを考えていました。

クライアントのメンバーシップの詳細 (つまり、ユーザー名と電子メール) とともにクライアントのページ リストを作成するにはどうすればよいですか?

4

1 に答える 1

1

私は 2 レベルのユーザーを持つシステムを開発しました。タイプ固有の情報を格納する最も簡単な方法は、個別のテーブルを用意し、それらにリンクする情報を割り当てることです。以前は、すべてのユーザーに顧客 ID を割り当て、それをタイプ固有のテーブルも同様です。彼らの情報を探したいときは、ユーザーの顧客IDを確認してから、アクセスするレコードのIDと照合します。

あなたの状況では、クライアント モデルとサプライヤー モデルの両方に Associate id 列を追加します。アソシエイト ID はユーザー名である可能性がありますが、asp.net メンバーシップのユーザー名をアソシエート ID にリンクする別のユーザー テーブルを用意するのが最善の方法であることがわかりました。次に、両方のテーブルで現在のユーザー アソシエイト ID を検索することで、ユーザーがクライアントかサプライヤかを簡単に確認できます。このアプローチは後者を意味し、サプライヤまたはクライアントが多くのユーザー アカウントを持っている場合、それらはすべて同じデータ セットにアクセスできます。ASP.Net メンバーシップ ロールを使用して承認の一部を実行することもできますが、レコードをユーザーに表示する前に、関連付け ID を確認する必要があります。

2012 年 2 月 5 日更新:

以下のようなユーザーとクライアントのモデルを作成できます。

public class User
{
    public int UserId{ get; set; }
    //This is from ASP.Net Membership
    public string Username { get; set; }
    public int AssosiateId { get; set; }
}

public class Client
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int ClientId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    //This is the ID of the Assosiate - the same as the user's assosiate id
    public int AssosiateId { get; set; }
}

上記のクライアントのサプライヤー用のクラスと同様のクラスを作成します。

于 2012-04-25T16:31:38.060 に答える