Я довольно новичок в программировании на C#, ASP.NET и основе MVC, поэтому я все еще пытаюсь понять все с помощью электронных книг и конечно, интернет.Ошибка HTTP 404.0 при редактировании пользователя в ASP.Net - MVC
Я делаю тестовое веб-приложение, чтобы понять, понимаю ли я некоторые основы программирования в ASP.NET - MVC, и я начал с шаблона MVC по умолчанию, который вы получаете при запуске нового проекта в Visual Studio. Помня об этом, вы должны знать, что у этого шаблона уже есть действующая функция входа и регистрации пользователя, и после того, как я подключил ее к моей базе данных, я мог зарегистрировать столько пользователей, сколько захочу, и войти в систему с этим пользователем. Чтобы сделать это немного дальше, я хочу изменить свойства пользователя после регистрации учетной записи. После того, как я addes код ниже, я могу видеть информацию о пользователе, и я могу редактировать их, но когда я нажмите кнопку Сохранить я получаю следующее сообщение об ошибке:
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
}
и 2 новые методы в ManageControlle r:
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();
}
у вас есть только два поля в вашей точке зрения бритвы внутри формы и ваши действия внутри контроллера ожидают более двух, поэтому он не может отображаться правильное действия во время обратной передачи – Sherlock
@Katana, в Еогеаспе переходит к каждому свойству в Модели и показывает это как поле. Поэтому у меня есть поле для каждого свойства, которое я использую. – NathanBaele
Итак, ваш 404 генерируется вашим собственным кодом? Вы пробовали пройти через него и проверить правильность привязки вашей модели? Проверьте, какие значения идентификатора TextBox отображаются как в html. –