[英]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.