我无法进入控制器的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
答案 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");
}
}