ASP.NET HTML.BeginForm/Url.Action Url 指向自身
ASP.NET HTML.BeginForm/Url.Action Url points to itself
我遇到了 ASP.NET BeginForm
助手的问题。
我尝试创建一个应该指向 /Project/Delete
的表单,我尝试了以下语句来达到这个目标:
@using (Html.BeginForm("Delete", "Project"))
{
}
<form action="@Url.Action("Delete", "Project")"></form>
但不幸的是,两个呈现的动作都指向/Projects/Delete/LocalSqlServer
,这是浏览器中调用的站点url
<form action="/Project/Delete/LocalSqlServer" method="post"></form>
我真的不知道为什么渲染的动作指向它自己而不是给定的 route.I 已经阅读了 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。
非常感谢你的帮助。
谢谢
桑德罗
事实是,它是 asp.net 中的一个错误,但他们拒绝承认它是一个错误,只是称其为 "feature"。但是,这是你如何处理它的...
这是我的控制器的样子:
// 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
的位置,"code"需要匹配控制器中的变量。 new {code = "" }
.
相同
希望对您有所帮助!
我遇到了 ASP.NET BeginForm
助手的问题。
我尝试创建一个应该指向 /Project/Delete
的表单,我尝试了以下语句来达到这个目标:
@using (Html.BeginForm("Delete", "Project"))
{
}
<form action="@Url.Action("Delete", "Project")"></form>
但不幸的是,两个呈现的动作都指向/Projects/Delete/LocalSqlServer
,这是浏览器中调用的站点url
<form action="/Project/Delete/LocalSqlServer" method="post"></form>
我真的不知道为什么渲染的动作指向它自己而不是给定的 route.I 已经阅读了 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。
非常感谢你的帮助。
谢谢 桑德罗
事实是,它是 asp.net 中的一个错误,但他们拒绝承认它是一个错误,只是称其为 "feature"。但是,这是你如何处理它的...
这是我的控制器的样子:
// 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
的位置,"code"需要匹配控制器中的变量。 new {code = "" }
.
希望对您有所帮助!