ASP.NET MVC Html.BeginForm для вставки новой записи базы данных через ActionMethod - PullRequest
0 голосов
/ 22 мая 2018

Когда я нажимаю кнопку отправки «Создать», страница обновляется, и ничего не происходит, и это похоже на то, что форма даже не вызывает действия контроллера «Сохранить проект».Ничего не вставлено в базу данных.

Я заметил, что URL, указанный в браузере, когда я нажимаю кнопку отправки, выглядит так: "http://localhost:62234/Operations/CreateProjectView?ProjectName=bhihi"

Разве это не должно быть SaveProject? Почему это не направляет егона правильный URL-адрес? Когда я ввожу следующий URL-адрес: "http://localhost:62234/Operations/SaveProject?ProjectName=bhihi"

Он создает проект и работает нормально.Но по какой-то причине форма не вызывает правильное имя ??

Вот мой код:

OperationsController:

   public ActionResult CreateProjectView()
    {
        return View();
    }

    public ActionResult SaveProject(Project model)
    {

        try
        {

            IRISInSiteLiveEntities DB = new IRISInSiteLiveEntities();

            Project newproject = new Project();

            newproject.ProjectName = model.ProjectName;


            DB.Projects.Add(newproject);
            DB.SaveChanges();


            return RedirectToAction("CreateProjectView");

        }
        catch(Exception ex)
        {
            throw ex;
        }

    }

CreateNewProject View:

 @model IRIS.Models.Project

 @{
     ViewBag.Title = "CreateProjectView";
     Layout = "~/Views/Shared/_Layout.cshtml";
 }

<div class="page-wrapper nope" style="background-image: url(../assets/images/background/AdobeStock_56278.png); background-size:auto">
    <div class="container-fluid">
        <div class="row">
            <div class="col-lg-12">
                <div class="card">
                    <div class="card-body">
                        <div class="form-body">

                            @using (Html.BeginForm("SaveProject", "Operations", FormMethod.Post))
                            {

                                <div class="row">
                                    <div class="col-6">
                                        <div class="row">
                                            <div class="col-lg-4 col-sm-6 offset-lg-2">
                                                <label class="control-label">Project Name</label>
                                            </div>
                                            <div class="col-lg-4 col-sm-6">
                                                @Html.TextBoxFor(model => model.ProjectName, new { @class = "form-control", Style = "text-align:center" })
                                            </div>
                                        </div>
                                        <br />
                                        <div class="row">
                                            <div class="col-lg-4 col-sm-6 offset-lg-2">
                                                <label class="control-label">Network Operator</label>
                                            </div>
                                            <div class="col-lg-4 col-sm-6">

                                            </div>
                                        </div>
                                        <br />
                                        <div class="row">
                                            <div class="col-lg-4 col-sm-6 offset-lg-2">
                                                <label class="control-label">Nokia Customer</label>
                                            </div>
                                            <div class="col-lg-4 col-sm-6">

                                            </div>
                                        </div>
                                        <br />
                                        <div class="row">
                                            <div class="col-lg-4 col-sm-6 offset-lg-2">
                                                <label class="control-label">Nokia Project Business Manager</label>
                                            </div>
                                            <div class="col-lg-4 col-sm-6">

                                            </div>
                                        </div>
                                        <br />
                                        <div class="row">
                                            <div class="col-lg-4 col-sm-6 offset-lg-2">
                                                <label class="control-label">Nokia Cost and Progress Manager</label>
                                            </div>
                                            <div class="col-lg-4 col-sm-6">

                                            </div>
                                        </div>
                                        <br />
                                        <div class="row">
                                            <div class="col-lg-4 col-sm-6 offset-lg-2">
                                                <label class="control-label">Nokia Procurement Manager</label>
                                            </div>
                                            <div class="col-lg-4 col-sm-6">

                                            </div>
                                        </div>
                                    </div>

                                    <div class="col-6">
                                        <div class="row">
                                            <div class="col-lg-4 col-sm-6">
                                                <label class="control-label">Nokia PDM</label>
                                            </div>
                                            <div class="col-lg-4 col-sm-6">

                                            </div>
                                        </div>
                                        <br />
                                        <div class="row">
                                            <div class="col-lg-4 col-sm-6">
                                                <label class="control-label">Nokia Project Manager</label>
                                            </div>
                                            <div class="col-lg-4 col-sm-6">

                                            </div>
                                        </div>
                                        <br />
                                        <div class="row">
                                            <div class="col-lg-4 col-sm-6">
                                                <label class="control-label">Nokia Project Engineer</label>
                                            </div>
                                            <div class="col-lg-4 col-sm-6">

                                            </div>
                                        </div>
                                        <br />
                                        <div class="row">
                                            <div class="col-lg-4 col-sm-6">
                                                <label class="control-label">Iris Project No</label>
                                            </div>
                                            <div class="col-lg-4 col-sm-6">

                                            </div>
                                        </div>
                                        <br />
                                        <div class="row">
                                            <div class="col-lg-4 col-sm-6">
                                                <label class="control-label">Iris Project Manager</label>
                                            </div>
                                            <div class="col-lg-4 col-sm-6">

                                            </div>
                                        </div>
                                        <br />
                                        <div class="row">
                                            <div class="col-lg-4 col-sm-6">
                                                <label class="control-label">Iris Project Engineer</label>
                                            </div>
                                            <div class="col-lg-4 col-sm-6">

                                            </div>
                                        </div>
                                    </div>
                                </div>

                                <br /><br />

                                <div class="col-2 offset-lg-1 pull-left">
                                    <div class="input-group">
                                        <input type="submit" class="btn btn-block btn-outline-info"  value="Create" style="width:100%; height:50px; padding: 5px" />
                                    </div>
                                </div>

                            }
                        </div>
                        </div>
                </div>
            </div>
        </div>
    </div>
</div>

Нет ошибок или чего-либо еще.Без исключений.Спасибо.

Ответы [ 2 ]

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

Когда я изменил Layout = на NULL, форма сработала.Когда я посмотрел в _Layout.cshtml, страница была заключена в тег.Как только я удалил это, форма работает.Глупый я.

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

Прежде всего, вы можете использовать Http декораторы в вашем контроллере.

[HttpGet]
public IActionResult CreateProjectView()
{
    return View();
}

[HttpPost]
public IActionResult CreateProject(Project model)
{
    try
    {
        // This should be your repository.
        var DB = new IRISInSiteLiveEntities();

        var newProject = new Project
        {
            ProjectName = model.ProjectName
        };

        DB.Projects.Add(newproject);
        DB.SaveChanges();

        return RedirectToAction("CreateProjectView");
    }
    catch(Exception ex)
    {
        throw ex;
    }
}

И ваш взгляд должен быть примерно таким (это только ваша часть):

@model IRIS.Models.Project

<form asp-controller="Operations" asp-action="CreateProject" id="operationsForm" method="post">

            @Html.AntiForgeryToken()

            <div class="form-group">
                <label asp-for="ProjectName">Project Name</label>
                <input asp-for="ProjectName" class="form-control" />
            </div>

            <div class="form-group">
                <label asp-for="NetworkOperator">NetworkOperator</label>
            </div>

            ...

            <div class="form-group">
                <input id="submit" type="submit" value="Create" class="btn btn-default">
            </div>
</form>

Теперь я точно не помню, но это вроде "новее"синтаксис бритвы (я не использую бритву).Это больше похоже на HTML и намного чище.Для этого вам придется поискать в Интернете.

То, что вы также должны посмотреть, это Шаблон репозитория .Я полагаю, что IRISInSiteLiveEntities является вашим хранилищем.Это должно реализовать метод, подобный CreateProject(), чтобы вы не писали напрямую с вашего контроллера - это не работа контроллера.

Итак, ваш контроллер должен выглядеть примерно так:

private readonly IRISInSiteLiveEntities m_siteLiveEntities;

[HttpGet]
public IActionResult CreateProjectView()
{
    return View();
}

[HttpPost]
public IActionResult CreateProject(Project model)
{
    try
    {
        var newProject = new Project
        {
            ProjectName = model.ProjectName
        };

        m_siteLiveEntities.CreateProject(newProject);

        return RedirectToAction("CreateProjectView");
    }
    catch(Exception ex)
    {
        throw ex;
    }
}

И снова ищите Дизайн архитектуры MVC , Шаблон репозитория и даже Чистая архитектура (Onion Architecture) .

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