Получение "Ресурс не найден при добавлении [HttpPost] в метод Edit - PullRequest
0 голосов
/ 03 мая 2018

Я получаю сообщение об ошибке:

Ресурс не найден. Описание: HTTP 404. Ресурс, который вы ищете (или одна из его зависимостей), мог быть удален, изменилось его имя или временно недоступен. Пожалуйста, просмотрите следующий URL и убедитесь, что он написан правильно.

Запрошенный URL: / Member / EditMember

Моя Actionlink, которая вызывает метод Edit, выглядит следующим образом:

@Html.ActionLink("Rediger", "EditMember", new { item.MemberID }) 

И представление, представляющее страницу EditMember:

@using (Html.BeginForm("EditMember", "Member", FormMethod.Post))
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        @Html.HiddenFor(model => model.MemberID)

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

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

И действие контроллера:

    [HttpPost]
    [ValidateAntiForgeryToken] 
    public ActionResult EditMember(Member model)
    {
        Member members = new Member();
        var member = DBContext.Members.Find(model.MemberID);

        if (member == null)
        {
            return HttpNotFound();
        }

        if(ModelState.IsValid)
        {                                
            DBContext.SaveChanges();
        }

        return View(member);
    }

Я также попытался изменить параметр методов действия, чтобы он выглядел следующим образом

[HttpPost]
[ValidateAntiForgeryToken] 
public ActionResult EditMember(int? id) { ... }

Но ошибка остается прежней.

ОДНАКО ...

Если я удалю аннотацию [HttpPost, ошибка исчезнет, ​​и она найдет запрошенный URL. Но он просто не отправит изменения и не сохранит их в базе данных.

То есть, если я сделаю:

[ValidateAntiForgeryToken] 
public ActionResult EditMember(Member model)

Затем он находит запрошенный URL, но не сохраняет изменения в базе данных.

В чем может быть моя проблема?

1 Ответ

0 голосов
/ 03 мая 2018

Я подозреваю, что вы не передаете Id в методе HttpGet. Это может быть результатом использования ViewModel для отображения информации об участнике.

В таблице нет строки с указанным идентификатором члена.

В вашем контроллере вы должны выполнить два действия (HttpGet и HttpPost)

[HttpGet] 
public ActionResult EditMember(int id)
{
    var member = db.member..SingleOrDefault(x => x.Id == id);

    if (member != null)
    {
        var memberViewModel = new MemberViewModel();
        memberViewModel.MemberID = member.Id;
        memberViewModel.FirstName = member.FirstName;
        memberViewModel.LastName = member.LastName;
        return View(memberViewModel);
    }

    return View();
}


[HttpPost]
[ValidateAntiForgeryToken] 
public ActionResult EditMember(Member model)
{
    Member members = new Member();
    var member = DBContext.Members.Find(model.MemberID);

    if (member == null)
    {
        return HttpNotFound();
    }

    if(ModelState.IsValid)
    {                                
        DBContext.SaveChanges();
    }

    return View(member);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...