繁体   English   中英

在ASP.Net中编辑用户时的HTTP错误404.0 - MVC

[英]HTTP Error 404.0 when editing User in ASP.Net - MVC

我很擅长使用C#,ASP.NET和MVC框架进行编程,所以我仍然试图通过电子书和互联网的帮助来解决所有问题。

我正在制作一个测试Web应用程序,看看我是否理解ASP.NET中的一些编程基础 - MVC,我开始使用在Visual Studio中启动新项目时获得的默认MVC模板。 考虑到这一点,你应该知道这个模板已经有一个工作的用户登录和注册功能,在我将它连接到我的数据库后,我可以注册尽可能多的用户,并与这些用户登录。 为了更进一步,我想在注册帐户后编辑用户属性。 在我添加下面的代码后,我可以看到我的用户信息,我可以编辑它们,但是当我按下“保存”按钮时,我收到以下错误消息:

http://puu.sh/pl5L5/b70da8b40d.png

请记住,我是一个新手,所以如果这个问题相当愚蠢,我会道歉。 提前致谢!

编码

ManageController下的新视图:

@using (Html.BeginForm("EditUser", "Manage", FormMethod.Post))
{
    <h4>Edit User Form.</h4>
    @Html.AntiForgeryToken()

    foreach (var prop in ViewData.ModelMetadata.Properties)
    {
        <div class="form-group">
            <label>@(prop.DisplayName ?? prop.PropertyName)</label>
            @if (prop.PropertyName == "Description")
            {
                @Html.TextArea(prop.PropertyName, null, new { @class = "form-control", rows = 5 })
            }
            else
            {
                @Html.TextBox(prop.PropertyName, null, new { @class = "form-control" })
            }
            @Html.ValidationMessage(prop.PropertyName)
        </div>
    }
    <div class="panel-footer">
        <input type="submit" value="Opslaan" class="btn btn-primary" />
        @Html.ActionLink("Cancel and return to List", "Index", null, new { @class = "btn btn-default" })
    </div>
}

一个新的EditUserViewModel:

public class EditUserViewModel
{
    public string Id { get; set; }

    [Required(AllowEmptyStrings = false)]
    [Display(Name = "Email")]
    [EmailAddress]
    public string Email { get; set; }

    [Required(AllowEmptyStrings = false)]
    [Display(Name = "Voornaam")] //FirstName
    public string Voornaam { get; set; }

    [Required(AllowEmptyStrings = false)]
    [Display(Name = "Achternaam")] //LastName
    public string Achternaam { get; set; }

    public string Telefoonnummer { get; set; } //Phonenumber
}

ManageController中有2个新方法:

    public async Task<ActionResult> EditUser(string id)
    {
        id = this.User.Identity.GetUserId();
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        var user = await UserManager.FindByIdAsync(id);
        if (user == null)
        {
            return HttpNotFound();
        }

        var userRoles = await UserManager.GetRolesAsync(user.Id);

        return View(new EditUserViewModel()
        {
            Email = user.Email,
            Voornaam = user.Voornaam,
            Achternaam = user.Achternaam,
            Telefoonnummer = user.PhoneNumber
        });
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> EditUser([Bind(Include = "Id, Email, Voornaam, Achternaam, Telefoonnummer")]EditUserViewModel editUser)
    {
        if (ModelState.IsValid)
        {
            var user = await UserManager.FindByIdAsync(editUser.Id);
            if (user == null)
            {
                return HttpNotFound();
            }

            user.UserName = editUser.Email;
            user.Email = editUser.Email;
            user.Voornaam = editUser.Voornaam;
            user.Achternaam = editUser.Achternaam;
            user.VolledigeNaam = editUser.Email;
            user.PhoneNumber = editUser.Telefoonnummer;

            await UserManager.UpdateAsync(user);

            return RedirectToAction("Index");
        }
        ModelState.AddModelError("", "Something failed.");
        return View();
    }

经过搜索,搜索和搜索,我终于找到了问题所在。 在EditUser方法的ManageController中有以下代码:

    return View(new EditUserViewModel()
    {
        Email = user.Email,
        Voornaam = user.Voornaam,
        Achternaam = user.Achternaam,
        Telefoonnummer = user.PhoneNumber
    })

但问题是ID字段没有得到用户的价值。 我忘记了这一点,因为我不希望用户能够编辑他们的ID。 所以代码应该是:

    return View(new EditUserViewModel()
    {
        Id = user.Id
        Email = user.Email,
        Voornaam = user.Voornaam,
        Achternaam = user.Achternaam,
        Telefoonnummer = user.PhoneNumber
    })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM