Как передать несколько параметров между представлением и контроллером в .net Core 2.0? - PullRequest
0 голосов
/ 21 мая 2018

в преобразовании между традиционным 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 выглядит какнуль, когда код практически идентичен?Спасибо

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