ASP.NET MVC, создание представлений с параметрами, ошибка при отправке POST - PullRequest
0 голосов
/ 10 июня 2019

Во-первых, я учу себя ASP.NET MVC, используя ASP.NET Core 2.1 с EF Core 2.1, так что я довольно схож с этим.

Я пытаюсь изменить представление просмотра, чтобы принять необязательный параметр для ClientID.Идея состоит в том, чтобы разрешить выбор из всех клиентов, если идентификатор не указан, но, если он указан, принудительно заставить ввод данных для клиента к указанному значению.

У меня возникли проблемы с получением GET для распознавания наличия параметра,если параметр конкретно не int? id.Если я изменяю его на это, то при отправке в POST возникает исключение для дублирующего идентификатора.

Все контроллеры и представления были очищены, только показанный метод GET был изменен.

КонтроллерСоздать метод GET:

// GET: ServiceRequest/Create/1
public IActionResult Create(int? clientId)
{
    ViewData["ClientData"] = new SelectList(_context.Clients, "ID", "FullName");
    if (clientId != null ) {
        if (_context.Clients.Find(clientId) == null) {
            return NotFound();
        }
        ViewData["ClientID"] = clientId;
        ViewData["ClientName"] = _context.Clients.Find(clientId).FullName;
    }
    ServiceRequest request = new ServiceRequest();
    request.Deadline = DateTime.Today;
    request.Status = Models.Status.DRAFT;
    return View(request);
}

Создать представление:

@model AskewServices.Models.ServiceRequest

@{
    ViewData["Title"] = "Open Service Request";
}

<h2>@ViewData["Title"]</h2>

<hr />
<div class="row">
    <div class="col-md-4">
        <form asp-action="Create">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="Deadline" class="control-label"> </label>
                <input asp-for="Deadline" class="form-control" />
                <span asp-validation-for="Deadline" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Status" class="control-label"></label>
                <select disabled asp-for="Status" class="form-control">
                    <option value=@AskewServices.Models.Status.DRAFT>Draft</option>
                </select>
                <span asp-validation-for="Status" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label class="control-label">Client</label>
                @if (ViewData.ContainsKey("ClientID")) {
                    <select disabled asp-for="ClientID" class="form-control">
                        <option value=@ViewData["ClientID"]>@ViewData["ClientName"]</option>
                    </select>    
                } else {
                    <select asp-for="ClientID" class="form-control" asp-items="ViewBag.ClientData"></select>
                }                
            </div>
            <div class="form-group">
                <input type="submit" value="Open" class="btn btn-warning" />
                <input type="reset" value="Reset" class="btn btn-info" />
            </div>
       </form>
    </div>
</div>

Маршруты:

app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
            routes.MapRoute(
                name: "OpenServiceRequest",
                template: "{controller=ServiceRequest}/{action=Create}/{clientId?}");
        });

Мысли: Параметры заданы неверно или проблема сМаршрутизация (возможно, он не видит маршрут создания ServiceRequest)?

1 Ответ

1 голос
/ 10 июня 2019

Я бы посоветовал вам использовать конфигурацию маршрута по умолчанию для ASP.Net Core, например,

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller}/{action=Index}/{id?}");
        });

Так что нет необходимости добавлять OpenServiceRequest MapRoute

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