【问题标题】:Routing is not going to the post part of the controller路由不去控制器的post部分
【发布时间】:2019-08-27 10:23:30
【问题描述】:

我无法进入控制器的 HttpPost 部分。

我创建了另一个控制器,但问题是一样的

我以前工作得很好

我添加了标签 [Route("CearSolicitud")] [HttpPost, ActionName("CearSolicitud")]

我还没有在路由部分添加任何东西

 routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

转到http://localhost:55935/Solicitudes 而不是http://localhost:55935/Solicitudes/CrearSolicitud

public class SolicitudesController : Controller
    {
        ApplicationDbContext db = new ApplicationDbContext();

        // GET: Solicitudes
        public ActionResult Index() 
        {
            return View();
        }

        //Get
        public ActionResult Solicitud()
        {
            return View();
        }

        //Post        
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Solicitud(Solicitudes s)
        {
            s.Id = "e17cba68-0a0b-4d6e-abaf-8026cb91fcd1";
            s.fk_tipo_transaccion = 3;
            s.fk_estado_solicitud = 1;
            db.Solicitudes.Add(s);
            db.SaveChanges();
            return View();
        }

景色

@model HGRecursosHumanos4.Models.Solicitudes

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

@using (@Html.BeginForm("CrearSolicitud", "Solicitudes", FormMethod.Post))
{
@Html.AntiForgeryToken()

<div class="form-horizontal">
    <hr />
    @Html.ValidationSummary(true, "", new { @class = "text-danger" })
    <div class="container">
        <div class="form-group col-md-5">
            @Html.LabelFor(model => model.VacacionesDias, htmlAttributes: new { @class = "control-label col-md-4" })
            <div class="col-md-3">
                @Html.EditorFor(model => model.VacacionesDias, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.VacacionesDias, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group col-md-5">
            @Html.LabelFor(model => model.FechaInicio, htmlAttributes: new { @class = "control-label col-md-3" })
            <div class="col-md-5">
                <input type="date" id="fechaInicio" name="fechaInicio" class="Filtros form-control input-sm" />
            </div>
        </div>



        <div class="form-group col-md-2">
            <div class="col-md-offset-2 col-md-3">
                <input type="submit" value="Solicitar" class="btn btn-success" />
            </div>
        </div>
    </div>
</div>
}

当我使用表单并点击提交按钮或应用程序再次转到索引或同一视图时

这就像 EF 破产之类的

我补充说,出现错误“CearSolicitud”视图或其主视图未找到,或者没有支持搜索位置的搜索引擎。我们在以下位置进行了搜索:

~/Views/Solicitudes/CrearSolicitud.aspx
~/Views/Solicitudes/CrearSolicitud.ascx
~/Views/Shared/CrearSolicitud.aspx
~/Views/Shared/CrearSolicitud.ascx
~/Views/Solicitudes/CrearSolicitud.cshtml
~/Views/Solicitudes/CrearSolicitud.vbhtml
~/Views/Shared/CrearSolicitud.cshtml
~/Views/Shared/CrearSolicitud.vbhtml 

@Nemanja      I certainly don´t have that view, if I use the same name on the post and no the get, the application goes to the get part again

【问题讨论】:

  • 能看到这个action方法的return语句:CrearSolicitud吗?您是否尝试直接浏览此 URL:localhost:55935/Solicitudes/CrearSolicitud?您在调用哪个操作方法时呈现的视图?
  • 我要编辑
  • 用[HttpGet]装饰第一个动作,所以它不会接受post请求。现在使用相同的名称,请求将转到所需的操作。另外,你上面的这个视图出现在哪个动作“索引”上?

标签: c# asp.net-mvc controller routing


【解决方案1】:

我有办法。

问题是,索引用于显示已添加注册表的列表,当它被更改为其他内容时,您无法看到该列表,这会导致您得出错误的结论。

路由工作正常,程序正在做应该做的事情,RedirectToAction("Index") 没问题。

教训是,花点时间想想你正在改变什么,并尝试遵循 VS 的做事方式。

我已经测试过了,它正在工作

 ApplicationDbContext db = new ApplicationDbContext();

            // GET: Solicitudes
            public ActionResult Index()
            {
                return View();
            }

            public ActionResult Index2()
            {
                return View(db.Solicitudes.ToList());
            }

            //Get
            public ActionResult Solicitud()
            {
                return View();
            }

            [HttpPost]
            [ValidateAntiForgeryToken]
            public ActionResult Solicitud(Solicitudes s)
            {
                try
                {
                    if (ModelState.IsValid)
                    {                 

                        s.FechaFinal = DateTime.Now;
                        s.FechaYHoraSolicitud = DateTime.Now;
                        s.Id = "e17cba68-0a0b-4d6e-abaf-8026cb91fcd1";
                        s.fk_tipo_transaccion = 3;
                        s.fk_estado_solicitud = 1;
                        db.Solicitudes.Add(s);
                        db.SaveChanges();
                        ViewBag.Message = "Solicitud guardada";
                        ModelState.Clear();
                        return RedirectToAction("Index2");
                    }
                    return View("ModelStateError");
                }
                //catch
                catch (Exception ex)
                {
                    //throw ex;
                    Console.WriteLine(ex.Message);
                    return View("Error");
                }
            } 

【讨论】:

    猜你喜欢
    • 2021-06-18
    • 2014-08-06
    • 1970-01-01
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    • 2016-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多