簡體   English   中英

編輯userPropfile asp.net mvc4

[英]Edit userPropfile asp.net mvc4

我有這個:

控制器動作:

 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應用程序,我要編輯注冊用戶的名字和姓氏。 我向“注冊”用戶添加了一些額外的屬性。 但是,如果我運行該應用程序,則會出現此錯誤:

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,“編輯”,“帳戶”,新的{Id = Context.User.Identity.Name},新的{title =“ Manage”})

和模型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當然也是一個整數,也在datbase中。 但是這個:

id = Context.User.Identity.Name-Identity.Name-我只看到Name-這是一個字符串,如何更改?

因為:UserProfile用戶= db.SelectByID(Id); 仍然用戶為空嗎?

謝謝

嘗試這個

@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的原因。

好的,我找到了一種解決方法,但這並不理想,因為我使用的是通用存儲庫,但是對於編輯配置文件,我不使用存儲庫,這是我固定的方法:

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);
            }

因此,這不是理想的課程,但目前可以正常工作

嘗試這個

@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.
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM