【问题标题】:ASP.NET MVC Html.BeginForm to Insert new database record via ActionMethodASP.NET MVC Html.BeginForm 通过 ActionMethod 插入新的数据库记录
【发布时间】:2018-05-22 13:04:58
【问题描述】:

当我按下提交“创建”按钮时,页面刷新并且没有任何反应,就像表单甚至没有调用控制器“SaveProject”actionresult。没有向数据库中插入任何内容。

我注意到点击提交按钮时浏览器中给出的 URL 是“http://localhost:62234/Operations/CreateProjectView?ProjectName=bhihi

不应该是 SaveProject 吗?为什么不将其定向到正确的 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 视图:

 @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>

没有错误或任何东西。没有例外。谢谢。

【问题讨论】:

    标签: asp.net asp.net-mvc forms razor


    【解决方案1】:

    首先,您可能想在控制器中使用 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>
    

    现在,我记不清了,但这是一种“较新”的剃刀语法(我不使用 Razor)。它看起来更像 HTML,而且更干净。您必须在 Internet 上查找。

    您还应该查看的是存储库模式。我假设 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 架构设计存储库模式,甚至 清洁架构(洋葱架构)

    【讨论】:

    • 我找到了问题!如果我将定义页面布局的部分更改为 NULL,则一切正常。那么布局中的某些东西会破坏它吗?
    • @Zack 我记不清如何使用 _Layout,但这是所有视图页面共享的东西 - 所以你只定义一次。在 _Layout 你应该有 @RenderBody() 部分来渲染你的特定页面。
    【解决方案2】:

    当我将 Layout = 更改为 NULL 时,表单工作。当我查看 _Layout.cshtml 时,页面被包含在一个标签中。一旦我删除了这个表格就可以了。真傻。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-05
      • 1970-01-01
      • 2018-12-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多