ASP.NET HTML.BeginForm/Url.Action Url указывает на себя
Я столкнулся с проблемой с ASP.NET BeginForm
помощник.
Я пытаюсь создать форму, которая должна указывать на /Project/Delete
и я попытался следующий statemant для достижения этой цели:
@using (Html.BeginForm("Delete", "Project"))
{
}
<form action="@Url.Action("Delete", "Project")"></form>
Но, к сожалению, оба оказанных действия указывают на /Projects/Delete/LocalSqlServer
, который является URL сайта, вызываемого в браузере
<form action="/Project/Delete/LocalSqlServer" method="post"></form>
Я действительно не знаю, почему отображаемое действие указывает на себя вместо данного маршрута. Я уже прочитал все сообщения (которые я нашел) в Google и SO, но не нашел решения.
Это единственный определенный маршрут:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
И это мой контроллер
[HttpGet]
public ActionResult Delete(string id)
{
return View(new DeleteViewModel { Name = id });
}
[HttpPost]
public ActionResult Delete(DeleteViewModel model)
{
_configService.DeleteConnectionString(model);
return null;
}
Я использую.NET 4.6.2.
Буду очень признателен за вашу помощь.
Спасибо Сандро
1 ответ
По правде говоря, это ошибка в asp.net, но они отказываются признать ее как ошибку и просто называют ее "фичей". Но вот как вы справляетесь с этим...
Вот как выглядит мой контроллер:
// gets the form page
[HttpGet, Route("testing/MyForm/{code}")]
public IActionResult MyForm(string code)
{
return View();
}
// process the form submit
[HttpPost, Route("testing/MyForm")]
public IActionResult MyForm(FormVM request)
{
// do stuff
}
Так что в моем случае code
будет добавлен так же, как вы получаете с LocalSqlServer
,
Вот обе версии того, как вы делаете базовую форму asp:
@using(Html.BeginForm("myform", "testing", new {code = "" }))
{
<input type="text" value="123" />
}
<form id="theId" asp-controller="testing" asp-action="myform" asp-route-id="" asp-route-code="">
<input type="text" value="asdf" />
</form>
В остановке, где я положил asp-route-code
, "код" должен соответствовать переменной в контроллере. То же самое для new {code = "" }
,
Надеюсь это поможет!