タイトルには次のように記載されています。 IDを持つジョブがあるページがあります。このIDをセッションに保存していて、会社のプロファイルにアクセスしようとしているときに、テーブルからジョブIDを持つセッション変数がジョブであるかどうかをテストしてから、ユーザーIDを選択してからこのユーザーIDで検索しますUserManagerでいくつかのデータをページに取り込もうとします。セッションとLINQを使用して自分のジョブからユーザーのプロファイルIDを取得する
コードについては会社概要:このコントローラの
public async Task<ActionResult> Details(string id)
{
String JobValID = Convert.ToString(Session["DetailsURL"]);
var UserJobID = context.Jobs.Where(x => x.ID.ToString() == JobValID).OrderByDescending(x => x.UserID).Select(x => x).ToString();
UserJobID = id; //This line is to see what value I got from LINQ and is still the Session value.
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
var user = await UserManager.FindByIdAsync(id);
return View(user);
}
ビューは、コントローラからデフォルト足場図です。
そして、このように私はSession["DetailsURL"]
var currentID = Url.RequestContext.RouteData.Values["id"];
Session["DetailsURL"] = currentID;
を取得し、私は、これがユーザープロファイルページを取得するための標準的な方法ではありませんね。しかし、私は会社のプロフィールに入るためにジョブページからActionLink
を使用しています。会社概要へJobPageから取得する。ここ
ActionLink
:
@Html.ActionLink("About this company", "Details", "UserAdmin", new { id = Session["UserJobID"] }, null)
私の問題は、私はユーザーIDを選択しようとしているとき、それは正しい値を取得していない、と私は探していたときに、LINQ
文ですUserManagerでは値はまだsession
の値です。
Found the solution here だから私はそれをやった方法:
var UserJobId = (from c in context.Jobs
where c.ID == JobValID
select new { c.UserID }).Single();
var myVal = UserJobId.UserID;
id = myVal;
あなたのlinq文が私を混乱させています。コレクションで 'ToString()'を呼び出すのはなぜですか? 'Select(x => x)'の使い方は? – Shyju
私は 'ToString'を単に文字列idの型とマッチさせるために、私のUserManagerは' string'を要求します。そして、最初は 'OrderByDescending(x => x.UserID).Select(x => x)'はなく、値は同じです。 – Eduard
私は 'OrderByDescending(x => x.UserID).Select(x => x)'ができないことを期待しているように感じます。 'Single'ユーザIDを取得しようとしていますか? – czifro