0

私はこのようなAccountControllerを持っています

public class AccountController : Controller
{
    [Authorize]
    public ActionResult MyProfile(string userEmail)
    {
        UserManager um = new UserManager();
        UserProfile user = new UserProfile();
        user = um.GetUserDetail(userEmail);
        return View(user);
    } 
 }

私はUserManager.csをこのようにしています

public class UserManager
{
    private ToLetDBEntities TLE = new ToLetDBEntities();
     public UserProfile GetUserDetail(string uemail)
    {
        var userDetails = TLE.users.FirstOrDefault(x => x.email_add == uemail);

        UserProfile up = new UserProfile();
        up.cellno = userDetails.cellno.Trim();
        up.email_add = userDetails.email_add.Trim();
        up.name = userDetails.name.Trim();
        up.password = userDetails.password.Trim();

        return up;
    }
}

私がデバッグしているとき、それは次のようなエラーを出します

オブジェクトのインスタンスに設定されていないオブジェクト参照
Null参照例外がユーザーによって処理されませんでした

ラインで

up.cellno=userDetails.cellno.Trim(); 

GetUserDetails機能の。

4

2 に答える 2

0

このエラーは、userDetailsインスタンスがないため、プロパティを取得できないことを示していcellnoます。

TLE.users.FirstOrDefault(x => x.email_add == uemail)それが何かを返していると確信していますか?エラーが発生する行にブレークポイントを設定すると、その値を確認できuserDetailsます。おそらくnullです。

于 2012-04-27T23:28:06.937 に答える
0

ほとんどの場合、このクエリは何も返しません。

TLE.users.FirstOrDefault(x => x.email_add == uemail);

レコードが返されない場合、このFirstOrDefaultメソッドはいかなる種類の表示も行いません。OrDefaultパーツはこの動作を指定します。任意のリターンタイプについて、レコードが見つからない場合は、そのタイプの「デフォルト」を返します。

参照型(あなたのもの)の場合、デフォルトはですnull。したがって、この呼び出しはまさにその例外になります。

userDetails.cellno.Trim();

それ以降、プロパティにアクセスできないため、例外が発生しuserDetailsますnullcellno

あなたの場合、そうではないが、そのプロパティがである可能性もあります。可能性は低いですが、可能です。デバッグ中にランタイム値を見ると、それが当てはまるかどうかがわかります。userDetails nullcellno

の場合userDetailsnull、クエリ条件を確認してください。たぶん、usersコレクションには何も含まれていませんか?たぶんあなたのx.email_add == uemail状態に一致するレコードはありませんか?(これは可能性が高いです。)

その場合cellnonull、そのオブジェクトがどのように構築されているか、データベース内のデータがどのように見えるかなどを確認する必要があります。いずれにしても、期待するデータが返されません。問題は、アクセスしているデータにあります。

于 2012-04-27T23:29:14.647 に答える