편집이 성공하면 최상위 목록 ("인덱스")으로 다시 리디렉션되는 내 컨트롤러에 기본 편집 메서드가 있습니다. MVC 스캐 폴딩 후의 표준 동작.C# ASP.NET MVC 이전 페이지로 돌아 가기
이 편집 방법을 변경하여 인덱스가 아닌 이전 페이지로 리디렉션하려고합니다. 내 Edit 메소드가 기본 매핑 된 입력 매개 변수 "id"를 사용하지 않았으므로, 먼저이를 사용하여 이전 URL을 전달하려고 시도했습니다. 내 편집 "GET"방법에서
, 나는 이전 URL을 잡기 위해 줄을 사용하고 괜찮 았는데 :ViewBag.ReturnUrl = Request.UrlReferrer;
그때 나는 내 양식을 사용하여 편집 "포스트"방법이 반환 URL을 전송 태그는 다음과 같습니다.
@using (Html.BeginForm(new { id = ViewBag.ReturnUrl }))
이제 바퀴가 떨어졌습니다. id 매개 변수에서 올바르게 구문 분석 된 URL을 가져올 수 없습니다.
이 *** UPDATE : 가이드로 게리의 예를 사용 ** *
해결, 나는 "ID"에서 "returnUrl"에서 내 매개 변수를 변경하고 숨김을 사용 필드를 사용하여 양식 태그 대신에 매개 변수를 전달하십시오. 교훈 : "id"매개 변수를 어떻게 사용했는지 간단하게 유지하십시오. 이제 작동합니다. 메모가있는 업데이트 된 코드는 다음과 같습니다.
먼저, 처음으로 수행 한 것처럼 Request.UrlReferrer를 사용하여 이전 URL을 가져옵니다.
//
// GET: /Question/Edit/5
public ActionResult Edit(int id)
{
Question question = db.Questions.Find(id);
ViewBag.DomainId = new SelectList(db.Domains, "DomainId", "Name", question.DomainId);
ViewBag.Answers = db.Questions
.AsEnumerable()
.Select(d => new SelectListItem
{
Text = d.Text,
Value = d.QuestionId.ToString(),
Selected = question.QuestionId == d.QuestionId
});
// Grab the previous URL and add it to the Model using ViewData or ViewBag
ViewBag.returnUrl = Request.UrlReferrer;
ViewBag.ExamId = db.Domains.Find(question.DomainId).ExamId;
ViewBag.IndexByQuestion = string.Format("IndexByQuestion/{0}", question.QuestionId);
return View(question);
}
및 I 해주기 형태 숨겨진 필드를 사용하여 [HttpPost]에있어서의 모델로부터 returnUrl 파라미터 합격 : 우리로부터 파라미터를 끌어 [HttpPost] 방법에서
@using (Html.BeginForm())
{
<input type="hidden" name="returnUrl" value="@ViewBag.returnUrl" />
...
숨겨진 필드는 (만약 내가 잘못 나 수정하시기 바랍니다) 당신은 편집이 실패 할 경우 편집 페이지를 다시 표시하고 사용하는이 작업을 수행 할 것인지 .... 여기에 내가 가정입니다
//
// POST: /Question/Edit/5
[HttpPost]
public ActionResult Edit(Question question, string returnUrl) // Add parameter
{
int ExamId = db.Domains.Find(question.DomainId).ExamId;
if (ModelState.IsValid)
{
db.Entry(question).State = EntityState.Modified;
db.SaveChanges();
//return RedirectToAction("Index");
return Redirect(returnUrl);
}
ViewBag.DomainId = new SelectList(db.Domains, "DomainId", "Name", question.DomainId);
return View(question);
}
'id'를 사용하지 않더라도 URL을 전달하는 데 사용하지 않겠습니다. 그건 해킹처럼 보이고, 더 좋은 방법이있을 것이라고 확신합니다. –
예, 정확합니다. 나는 못생긴 해킹을 사용했다. 이것은 내 첫 번째 MVC 응용 프로그램입니다. 나는 많은 것을 시도하고 많은 포스트를 읽고 해킹은 최선의 시도였다. 나는 게리의 예를 기반으로 그것을 고쳤다. 고마워, –