Asp.net-Mvc-3
為什麼 Html.BeginForm 生成空動作?
我在一個叫做的區域有一個控制器
Adminpublic class SiteVisitController : Controller { public ViewResult ReadyForCompletion() { ... } public ViewResult CompleteAndExport() { ... } }和一個視圖 (
ReadyForCompletion.cshtml) 回發到同一類上的不同控制器操作@using (Html.BeginForm( "CompleteAndExport", "SiteVisit" )) { <input type="submit" value="Complete & Export" /> }為這個表單生成的 HTML 有一個空白動作:
<form action="" method="post"> <input type="submit" value="Complete & Export" /> </form>我想知道**為什麼這有一個空白動作?**有關更多資訊,我還添加了
@Url.RouteUrl(new { controller = "ReadyForCompletion", action = "SiteVisit", area = "Admin" })這也列印出一個空字元串。此外,如果我使用空
Html.BeginForm(),它會生成正確的操作。註冊的路線是
context.MapRoute( "Admin_manyParams", "Admin/{controller}/{action}/{id}/{actionId}", new { action = "Index", id = UrlParameter.Optional, actionId = UrlParameter.Optional } );
我相信您的問題是由連續的可選參數引起的。在我更改路由以包含兩個可選參數之前,我無法複製您的問題。
請參閱:這篇解釋問題的文章
對於那些使用 ASP.NET Core 遇到此問題的人來說,根本原因是相同的,儘管解決方案略有不同。我第一次在 Core 中看到這一點,呼叫時使用了多個預設值
.MapRoutes()。例如routes.MapRoute( name: "default", template: "{controller}/{action}/{id?}", defaults: new { controller = "Foo", action = "Bar" } );解決方法是將預設值放入字元串模板中:
routes.MapRoute( name: "default", template: "{controller=Foo}/{action=Bar}/{id?}" );YMMV。