2009-12-21 1 views
0

На мой взгляд, вызов ниже генерирует URL, оканчивающийся Задачи/Edit, но я хочу, чтобы генерировать URL как задачи/Edit/23Binding и маршрутизации или проблема URL поколение приложения ASP.Net Mvc

<%= Html.ActionLink<TaskController>("Edit Task", (x) => x.Edit("23"))%> 

в Global.asax:

string taskController = NameResolver.NameOfController<TaskController>(); 
string editAction = NameResolver.NameOfAction<TaskController>(x => x.Edit(null)); 
routes.MapRoute(
     "EditTasks", 
     "Tasks/Edit/{id}", 
     new { controller = taskController, action = editAction, id = string.Empty }); 

У меня также есть проблема с привязкой к этому действию. Значения, установленные из представления, не привязаны к моему параметру Edit. Он приходит null каждый раз, и я не устанавливал DefaultModelBinder в любом месте. Вот действие «Редактировать»:

public ActionResult Edit (string id) 
    { 
     //retrieve some data and pass it to view and return view 
    } 

Так в чем проблема? Как я могу решить проблему url и binding? И да, я новичок Asp.Net Mvc :)

ответ

3
<%= Html.ActionLink("Task", "Edit", new { id = "2" }) %> 

Хотя почему ваш идентификатор строки, а не int?

+0

Большое спасибо. Для id вещь это фактически не целое число, для простоты я изменил его таким образом в образце кода. Еще один вопрос: могу ли я использовать строго типизированное имя действия, то есть не «Изменить», имеет ли Mvc такую ​​полезность? – rovsen

+0

@arch stanton: Я не вижу, как вы можете использовать строго типизированное имя действия, потому что Edit - это метод, а не класс без серьезного зависания, анализируя выражения LINQ. Я дам это выстрел, когда у меня будет время, но, если возможно, оно никогда не должно доходить до производства. Это был бы плохой хак, который не обслуживается. –

+0

Я слышал, что MvcContrib поддерживает те сильно типизированные способы использования, как Html.ActionLink («Редактировать задачу», (x) => x.Edit («23»)). Но сам не пробовал. – rovsen