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 = "" },

Надеюсь это поможет!

Другие вопросы по тегам