в преобразовании между традиционным MVC и ядром .net я сталкиваюсь с чем-то странным, когда использую почти одинаковый код в обеих технологиях.
Я передаю параметры как поля id, так и имениотправляющий контроллер из поля зрения в принимающий контроллер.Приведенный ниже код работает в традиционном MVC:
<td>
@Html.ActionLink("Edit", "Edit", new { id = item.Id }) |
@Html.ActionLink("Details", "Details", new { id = item.Id }) |
@Html.ActionLink("Delete", "Delete", new { id = item.Id })
@Html.ActionLink("New Comment", "Create", "ServiceRequestNotes", new { ServiceRequest = item.Id, returncontroller = "ServiceRequests" }, null)<br />
</td>
И
// POST: ServiceRequestNotes/Create
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Create([Bind(Include = "Id,NoteDescription,LastUpdated,WrittenBy,ServiceRequest")] ServiceRequestNote serviceRequestNote, string returncontroller)
{
if (ModelState.IsValid)
{
db.ServiceRequestNotes.Add(serviceRequestNote);
serviceRequestNote.LastUpdated = DateTime.Now;
serviceRequestNote.WrittenBy = User.Identity.Name;
await db.SaveChangesAsync();
//return Redirect(ControllerContext.HttpContext.Request.UrlReferrer.ToString());
return RedirectToAction("Index", returncontroller);
}
ViewBag.ServiceRequest = new SelectList(db.ServiceRequests, "Id", "RequestHeading", serviceRequestNote.ServiceRequest);
return View(serviceRequestNote);
}
Значение returncontroller заполняется сразу после отладки и успешно сохраняется
У меня есть почтитот же код в .net Core
<td>
<a asp-action="Edit" asp-route-id="@item.Id">Edit</a> |
<a asp-action="Details" asp-route-id="@item.Id">Details</a> |
<a asp-action="Delete" asp-route-id="@item.Id">Delete</a> |
@Html.ActionLink("New Comment", "Create", "ServiceRequestNotes", new { ServiceRequest = item.Id, returncontroller = "TeamServiceRequests" }, null)<br />
</td>
и
// POST: ServiceRequestNotes/Create
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("Id,NoteDescription,LastUpdated,WrittenBy,ServiceRequest")] ServiceRequestNotes serviceRequestNotes, string returncontroller)
{
if (ModelState.IsValid)
{
_context.Add(serviceRequestNotes);
serviceRequestNotes.LastUpdated = DateTime.Now;
serviceRequestNotes.WrittenBy = User.Identity.Name;
await _context.SaveChangesAsync();
//return RedirectToAction(nameof(Index));
return RedirectToAction("Index", returncontroller);
}
ViewData["ServiceRequest"] = new SelectList(_context.ServiceRequests, "Id", "RequestDescription", serviceRequestNotes.ServiceRequest);
return View(serviceRequestNotes);
}
Однако при отладке, когда она достигает публичной строки асинхронного создания, значение returncontroller равно нулю.
Он по-прежнему сохраняет комментарий, но поскольку вышеприведенное является нулевым, он возвращает представление индекса indexcontroller, а не исходное.
Кто-нибудь может понять, почему в ядре .net значение returncontroller выглядит какнуль, когда код практически идентичен?Спасибо