路由不会到达控制器的后期部分

时间:2019-04-05 13:37:24

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

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

我创建了另一个控制器,问题还是相同的

我以前工作得很好

我添加了标签[Route(“ CrearSolicitud”)]         [HttpPost,ActionName(“ CrearSolicitud”)]

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

 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破产了一样。

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

~/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

1 个答案:

答案 0 :(得分:0)

我有解决办法。

问题是,索引是用于显示已添加注册表的列表,如果更改了其他内容,您将看不到该列表,从而导致错误的结论。

路由工作正常,程序正在执行应做的事情,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");
                }
            }