2011-06-16 25 views
9

Tôi có một bộ điều khiển trong một khu vực được gọi là AdminTại sao Html.BeginForm tạo ra hành động trống?

public class SiteVisitController : Controller 
{ 
    public ViewResult ReadyForCompletion() { ... } 

    public ViewResult CompleteAndExport() { ... } 
} 

và một cái nhìn (ReadyForCompletion.cshtml) có bài viết về một hành động điều khiển khác nhau trên cùng lớp

@using (Html.BeginForm("CompleteAndExport", "SiteVisit")) 
{   
    <input type="submit" value="Complete &amp; Export" /> 
} 

HTML được tạo cho hình thức này có một hành động trống:

<form action="" method="post"> <input type="submit" value="Complete &amp; Export" /> 

</form> 

Tôi muốn biết lý do tại sao điều này có ab hành động lúng túng? Mọi chi tiết, tôi cũng được thêm vào trong một

@Url.RouteUrl(new { controller = "ReadyForCompletion", action = "SiteVisit", area = "Admin" }) 

mà cũng in ra một chuỗi rỗng. Ngoài ra, nếu tôi sử dụng trống Html.BeginForm(), nó sẽ tạo ra hành động chính xác.

tuyến đã đăng ký là

 context.MapRoute(
      "Admin_manyParams", 
      "Admin/{controller}/{action}/{id}/{actionId}", 
      new { action = "Index", id = UrlParameter.Optional, actionId = UrlParameter.Optional } 
     ); 
+0

Bạn có thể hiển thị các tuyến đường đã đăng ký không? –

+0

Tôi đã thêm các tuyến đường đã đăng ký, nhưng tôi bị nhầm lẫn bởi lý do tại sao điều đó sẽ quan trọng vì tôi có thể thực hiện thành công 'Html.BeginForm()' – kelloti

Trả lời

10

Tôi tin rằng vấn đề của bạn là do có thông số tùy chọn liên tiếp. Tôi đã không thể sao chép vấn đề của bạn cho đến khi tôi thay đổi tuyến đường để chứa hai tham số tùy chọn.

Xem: This article which explains the problem

+0

Đúng vậy, thưa bạn. Khùng! – kelloti

0

Đối với những người bạn gặp phải vấn đề này bằng ASP.NET Lõi nguyên nhân gốc rễ là như nhau, mặc dù giải pháp này là hơi khác nhau. Lần đầu tiên tôi thấy điều này trong Core sử dụng nhiều giá trị mặc định khi gọi số .MapRoutes(). Ví dụ.

routes.MapRoute(
    name: "default", 
    template: "{controller}/{action}/{id?}", 
    defaults: new { controller = "Foo", action = "Bar" } 
); 

Cách giải quyết là đặt các giá trị mặc định vào mẫu chuỗi:

routes.MapRoute(
    name: "default", 
    template: "{controller=Foo}/{action=Bar}/{id?}" 
); 

YMMV.

Các vấn đề liên quan