0

現在、asp.net mvc4 で作業しています。そして、ユーザー プロファイル情報を実装します。私のコントローラー、つまりHomeControllerには含まれています。

public ActionResult Resume()
{
    using (ProfileInfo profile = new ProfileInfo())
    {
        return View(profile.ProfileGetInfoForCurrentUser());
    }
}

私のprofileinfoクラスには、型「ResumeViewModel」を返すメソッドが含まれています。

public ResumeViewModel ProfileGetInfoForCurrentUser()
{
    ProfileBase profile = ProfileBase.Create(Membership.GetUser().UserName);
    ResumeViewModel resume = new ResumeViewModel();
    resume.Email = Membership.GetUser().Email.ToString();
    resume.FullName = Membership.GetUser().UserName;
    return resume;

}

今、私のResumeViewModelは次のようになります。

public class ResumeViewModel
{
    public string FullName { get; set; }
    public string Email { get; set; }
}

私の見解は強くタイプです'@model PortfolioMVC4.Models.ResumeViewModel'。ただし、これを実行すると、次のエラーが発生します。

Object reference not set to an instance of an object. 
  Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

 Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
{
Line 14:             ProfileBase profile = ProfileBase.Create(Membership.GetUser().UserName);
Line 15:             ResumeViewModel resume = new ResumeViewModel();
Line 16:             resume.Email = Membership.GetUser().Email.ToString();
Line 17:             resume.FullName = Membership.GetUser().UserName;

15 行目でエラーが発生します。これは基本的に、ProfileGetInfoForCurrentUser メソッドに存在するコードです (上記を参照)。どうすればいいのかわからない?これに関するヘルプは評価できます。

4

2 に答える 2

4

Emailプロパティがnullのように見えるため、.ToStringメソッドを呼び出すことはできません。ちなみに、MembershipUser.Emailプロパティはすでに文字列であるため、プロパティを呼び出すことは.ToString()ほとんど意味がありません。

また、メソッドを1回だけ呼び出し、Membership.GetUser()結果をローカル変数にキャッシュして、データベースに複数のリクエストが発生しないようにすることをお勧めします。

public ResumeViewModel ProfileGetInfoForCurrentUser()
{
    var user = Membership.GetUser();
    ProfileBase profile = ProfileBase.Create(user.UserName);
    ResumeViewModel resume = new ResumeViewModel();
    resume.Email = user.Email;
    resume.FullName = user.UserName;
    return resume;
}

ちなみに、あなたはprofileそれを使って多くの有用なことをせずにいくつかの変数を宣言しているようです。本当に必要ですか?

于 2012-09-20T09:48:44.063 に答える
2

おそらくMembership.GetUser()nullを返しました-クライアントは認証されていますか?

[Authorize]たぶん、あなたはあなたのコントローラーに属性を置く必要があります。

デバッガーはあなたの友達です!

于 2012-09-20T09:44:38.390 に答える