首页 文章

编辑userPropfile asp.net mvc4

提问于
浏览
0

我有这个:

控制器动作:

public ActionResult Edit(int id = 0)
 {
      UserProfile user = db.SelectByID(id);
      return View(user);
      //if (id == null)
      //{
      //    return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
      //}
      //UserProfile userProfile = db.SelectByID(id);
      //if (userProfile == null)
      //{
      //    return HttpNotFound();
      //}
      //return View(userProfile);
      }

模型视图:

[Table("UserProfile")]
 public class UserProfile
 {
     [Key]
     [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
     public int UserId { get; set; }
     public string UserName { get; set; }
     public string FirstName { get; set; }
     public string LastName { get; set; }
     public string Email { get; set; }
  }

并且观点:

@model ContosoUniversity.Models.UserProfile
@{
    ViewBag.Title = "Edit";
}

<h2>Edit</h2>

@using (Html.BeginForm("Edit","Account"))
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4>Lola Biker</h4>
        <hr />
        @Html.ValidationSummary(true)
        @Html.HiddenFor(model => model.UserId)

        <div class="form-group">
            @Html.LabelFor(model => model.LastName, new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.LastName)
                @Html.ValidationMessageFor(model => model.LastName)
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.FirstName, new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.FirstName)
                @Html.ValidationMessageFor(model => model.FirstName)
            </div>
        </div>

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Save" class="btn btn-default" />
            </div>
        </div>
    </div>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

它是一个asp.net mvc4应用程序,我想编辑注册用户的firstName和LastName . 我向Register用户添加了一些额外的属性 . 但是如果我运行应用程序,我会收到此错误:

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.

Source Error: 


Line 221:            {
Line 222:
Line 223:                UserProfile user = db.SelectByID(id);
Line 224:                return View(user);
Line 225:                //if (id == null)

Source File: g:\Mijn Documents\My Web Sites\Lolabikes\C#\ContosoUniversity\Controllers\AccountController.cs    Line: 223

我已登录,将被重定向到编辑页面,如下所示:

@if (Request.IsAuthenticated)
{
    <text>
        Hello, @Html.ActionLink(User.Identity.Name, "Edit", "Account", routeValues: null, htmlAttributes: new { @class = "username", title = "Manage" })!
        @using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logoutForm" }))
        {
            @Html.AntiForgeryToken()
            <a href="javascript:document.getElementById('logoutForm').submit()">Log off</a>
        }
    </text>
}
else
{
    <ul>
        <li>@Html.ActionLink("Register", "Register", "Account", routeValues: null, htmlAttributes: new { id = "registerLink" })</li>
        <li>@Html.ActionLink("Log in", "Login", "Account", routeValues: null, htmlAttributes: new { id = "loginLink" })</li>
    </ul>
}

谢谢您的帮助

我尝试过这样的:

public ActionResult Edit(int? id)
{
    UserProfile user = db.SelectByID(id);
    return View(user);
}

但后来我仍然得到id = null

我现在就像这样编辑:

public ActionResult Edit(int? id)
{
    if (id == null)
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    }
    UserProfile user = db.SelectByID(id);
    if (user == null)
    {
        return HttpNotFound();
    }
    return View(user);               
}

并查看:

@Html.ActionLink(User.Identity.Name, "Edit", "Account", new { userId = 123 }, new { title = "Manage" })

我把断点放在这个:if(id == null)

它说:null = null

我现在就像这样编辑:

public ActionResult Edit(int?userId){

//if (userId = null )
            //{
            //    return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            //}
             UserProfile user = db.SelectByID(userId);
     //       if (user == null)
     //       {
     //           return HttpNotFound();
     //       }
            return View(user);               
        }

但是用户为空

所以,如果我这样做,你建议:

public ActionResult Edit(int userId )
 {
    //your code here you get the userId to manipulate.
 }

当然我看到空的texboxes(firstName,lastName)

好的,我现在就像这样:

@ Html.ActionLink(User.Identity.Name,“Edit”,“Account”,new ,new

和一个模型UserProfile,像这样:

[Table("UserProfile")]
    public class UserProfile
    {

        public int Id { get; set; }
        public string UserName { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Email { get; set; }
        //ok
        public int MyProperty { get; set; }
    }

但我的Id当然是一个整数,也在数据库中 . 但是这个:

Id = Context.User.Identity.Name - Identity.Name - 我只看到名字 - 这是一个字符串,如何改变?

因为:UserProfile user = db.SelectByID(Id);仍然用户为空????

谢谢

3 回答

  • 0

    试试这个

    @Html.ActionLink(User.Identity.Name, "Edit", "Account", new { userId = *Your ID here* }, new {title = "Manage"})
    

    和你的控制器方法一样

    public ActionResult Edit(int userId )
     {
        //your code here you get the userId to manipulate.
     }
    

    你正在做的错误是你为路由值提供null . 这就是您在控制器操作中获取null的原因 .

  • 0

    好吧,我找到了一个解决方法,但它并不理想,因为我使用的是Generic存储库,但是对于编辑配置文件,我不使用存储库,这就是我修复的方法:

    private LolaBikeContext db = new LolaBikeContext();
    
    
    
    public ActionResult Edit(string UserId)
                {             
    
                    string username = User.Identity.Name;
    
                    // Fetch the userprofile
                    UserProfile user = db.userProfiles.FirstOrDefault(u => u.UserName.Equals(username));
    
                    // Construct the viewmodel
                    UserProfile model = new UserProfile();
                    model.FirstName = user.FirstName;
                    model.LastName = user.LastName;
                    model.Email = user.Email;
                    model.Motto = user.Motto;
                    model.PlaceOfBirth = user.PlaceOfBirth;
                    model.HowManyBikes = user.HowManyBikes;
                    model.BesideYourBeth = user.BesideYourBeth;
                    model.NicestRide = user.NicestRide;
                    model.WorstRide = user.WorstRide;
                    model.AmountKmPerYear = user.AmountKmPerYear;
                    model.AverageSpeed = user.AverageSpeed;
                    model.AbleToChatWhileRiding = user.AbleToChatWhileRiding;
                    model.PhoneNumber = user.PhoneNumber;
    
    
    
    
                    return View(user);               
                }
    
    
                [HttpPost]
                public ActionResult Edit(UserProfile userprofile)
                {
                    if (ModelState.IsValid)
                    {
                        string username = User.Identity.Name;
                        // Get the userprofile
                        UserProfile user = db.userProfiles.FirstOrDefault(u => u.UserName.Equals(username));
    
                        // Update fields
                        user.FirstName = userprofile.FirstName;
                        user.LastName = userprofile.LastName;
                        user.Email = userprofile.Email;
                        user.Motto = userprofile.Motto;
    
                        user.PlaceOfBirth = userprofile.PlaceOfBirth;
                        user.HowManyBikes = userprofile.HowManyBikes;
                        user.BesideYourBeth = userprofile.BesideYourBeth;
                        user.NicestRide = userprofile.NicestRide;
                        user.WorstRide = userprofile.WorstRide;
                        user.AmountKmPerYear = userprofile.AmountKmPerYear;
                        user.AverageSpeed = userprofile.AverageSpeed;
                        user.AbleToChatWhileRiding = userprofile.AbleToChatWhileRiding;
                        user.PhoneNumber = userprofile.PhoneNumber;
    
                        db.Entry(user).State = EntityState.Modified;
    
                        db.SaveChanges();
    
                        return RedirectToAction("Edit", "Account"); // or whatever
                    }
    
                    return View(userprofile);
                }
    

    所以它不是理想的,但现在它起作用了

  • 0

    试试这个

    @Html.ActionLink(User.Identity.Name, "Edit", "Account", new { userId = *Your ID here* }, new {title = "Manage"})
    

    和你的控制器方法一样

    [HttpPost]
     public ActionResult Edit(int userId = 0)
     {
        //your code here you get the userId to manipulate.
     }
    

相关问题