2012-04-17 23 views
20

Tôi đang sử dụng ASP.Net MVC. Dưới đây là các đoạn mã của tôi từ một bộ điều khiển có tên Khóa học:URL.Action bao gồm id khi xây dựng URL

public ActionResult List(int id) 
{ 
    var viewmodel.ShowUrl = Url.Action("Show", "Course"); 


    ... 
} 

public ActionResult Show(int id) 
{ 
    ... 
} 

viewmodel.ShowUrl chọn bất kỳ giá trị nào là thông số "id". Vì vậy, viewmodel.ShowUrl trở thành "/ Course/Show/151" (giá trị của id là 151); Tôi muốn có thể đặt phần id trên máy khách dựa trên tương tác của người dùng. Tôi muốn giá trị của viewmodel.ShowUrl là "/ Course/Show".

Điều này có vẻ giống như một lỗi đối với tôi. Tôi không nói cho Url.Action bao gồm một giá trị id. Nó tự làm nó. Nếu tôi muốn đặt giá trị id thì tôi sẽ làm điều gì đó như sau:

var viewmodel.ShowUrl = Url.Action("Show", "Course", new {id = somevalue}); 

Vì vậy, làm thế nào để bạn ngăn chặn MVC thêm giá trị id? Tôi có thể hardcode viewmodel.ShowUrl để "/ Course/Show" nhưng đó có vẻ là một giải pháp kludgy. Cảm ơn.

+0

tôi không thể nhớ chính xác nhưng 'Routedata' là' ViewData' và đó là lý do tại sao nó được thông qua. Tôi nghĩ bạn có thể làm 'Url.Action (" Show "," Course ", new {});' hoặc làm trống 'RouteData' trên đối tượng' ViewData'. –

Trả lời

7

Tôi đoán trong định tuyến của bạn, bạn không chỉ định id đó là thông số tùy chọn. Đây là tuyến đường mặc định trong một dự án mẫu.

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } //Parameter defaults 
); 

Ghi chú bao gồm id = UrlParameter.Optional. Nếu không có điều đó, bạn sẽ nhận được hành vi mà bạn mô tả bởi vì nó cho rằng id là bắt buộc.

Một lưu ý phụ, nếu hành động Hiển thị của bạn không phải lúc nào cũng có id thì nó phải là rỗng hoặc cung cấp mặc định.

public ActionResult Show(int? id) 
public ActionResult Show(int id = 0) 

Nếu không, bạn sẽ gặp lỗi khi thử tải url mà không có tham số id.

19

Chỉ cần đi qua cùng một vấn đề và do đó bạn biết, bạn cũng có thể chỉ cần sử dụng một chuỗi rỗng:

@Url.Action("Show", "Course", new { id = "" }) 
9

Tôi biết điều này là cũ, nhưng tôi thấy điều này đầu tiên, nhưng không thích bất kỳ những giải pháp này, vì vậy tôi tiếp tục tìm kiếm và tìm thấy https://stackoverflow.com/a/19110921/1130636.

Bạn có thể sử dụng UrlParameter.Optional để giải quyết vấn đề này

Url.Action("Show", "Course", new { id = UrlParameter.Optional })

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