1

reg_sql を使用してデータベースを作成し、それを membersip のプロジェクト データベースに追加しました。ここで、ログインしたユーザー ID にアクセスする必要があります。非常に簡単な方法で、それをビューに表示して、dositwrk かどうかを確認したいと考えています。コントローラーの関数でこのコードを使用します。

  var id = from ad in StoreDb.aspnet_Users where
  StoreDb.aspnet_Users.Name == System.Web.HttpContext.Current.User.Identity.Name 
  select ad.UserId;
  ViewBag.Message = id;

しかし、私はこれを見ました:

System.Data.Objects.ObjectQuery`1[System.Guid]

ユーザー ID を取得するにはどうすればよいですか??? ありがとう

4

2 に答える 2

1

これは、コントローラーにドロップして、IDを取得するアクションで使用できる関数です。プロバイダーがすでにすべてを実行するためのAPIを提供している場合、メンバーシップデータベースをクエリするためにそのすべてのコードを実行する必要はありません。

private Guid GetUserID() {
    var currentUser = Membership.GetUser(User.Identity.Name);
    var userID = (Guid)currentUser.ProviderUserKey;
    return userID;
}

public ActionResult Index() {
    var userID = GetUserID();
    ...
}

また、そのコードをベースコントローラーに配置して、それを継承する任意のコントローラーからその関数にアクセスできるようにすることもできます。それはあなたのコードをドライに保ちます(あなた自身を繰り返さないでください)のであなたはコードの重複を持っていません

使用法は

ベースコントローラーを作成し、次のフォルダーに配置しますControllersBase

namespace YourApp.Web.Controllers {
    public abstract class MyBaseController : Controller {

        protected Guid GetUserID() {
            var currentUser = Membership.GetUser(User.Identity.Name);
            var userID = (Guid)currentUser.ProviderUserKey;
            return userID;
        }
    }
}

これで、そのベースコントローラーを継承することで、通常のコントローラーのいずれかでそのベースコントローラーを使用できます。

public class HomeController : MyBaseController {

    public ActionResult Index() {
        var userID = GetUserID();
        ...
    }
}
于 2012-05-27T11:34:29.173 に答える
1

var idこの場合ObjectQuery<System.Guid> は、クエリの結果を解析する必要があります。たとえば、次のようになります。

foreach (Guid result in id)
  Console.WriteLine("UserID: {0}", result.ToString());
于 2012-05-27T11:23:24.817 に答える