Получение параметра actionlink из маршрута - PullRequest
0 голосов
/ 05 марта 2010

Я пытаюсь добавить веб-форму, которая позволяет пользователю добавлять запись базы данных с определенным внешним ключом.

Я создаю такую ​​ссылку

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

и полученный URL-адрес - http://localhost:3015/TumourGroup/CreateSub/2 (где 2 - это идентификатор, который я передал ранее ссылке на действие). Вопрос в том, как мне получить значение id из URL? Я использую его для захвата «основной» таблицы, чтобы я мог создать новую запись таблицы, которая имеет внешний ключ, указывающий на «главную» таблицу.

Ответы [ 2 ]

0 голосов
/ 05 марта 2010

Предполагая, что TumourGroup - это имя контроллера, и у вас есть маршрут, который выглядит примерно так:

routes.MapRoute(
    "Default",
    "{controller}, {action}, {id}",
    new { controller="Home", action="Index", id="" }
)

Тогда в вашем TumourGroup контроллере вам просто нужен метод контроллера, который выглядит следующим образом:

public ActionResult CreateSub (int id)
{
    // blah
}  

Параметр id будет содержать ваш идентификатор из URL.

РЕДАКТИРОВАТЬ: Чтобы включить идентификатор при отправке формы:

public ActionResult CreateSub (TumourGroupSubcategory tumourSubgroupToCreate)
{
    // blah
}  
  1. Добавьте идентификатор как свойство в свой класс TumorGroupSubcategory.

  2. В представлении формы, которое вы отправляете, включите скрытое поле, имя которого совпадает с идентификатором в вашем классе TumorGroupSubcategory, и заполните его своим полем id.

Когда ваш пользователь отправляет форму, связыватель моделей подберет поле и автоматически поместит его в свойство id tumourSubgroupToCreate.

0 голосов
/ 05 марта 2010

У вашей функции контроллера CreateSub есть int id

public ActionResult CreateSub (int id)

Если вы хотите перейти к форме с этим идентификатором, а затем опубликовать с другим набором данных, вам понадобятся две функции, дифференцированные на

[AcceptVerbs(HttpVerbs.Get)]
public ActionResult CreateSub (int id)

Метод get предназначен для перехода к форме ввода, сообщение вызывается при отправке формы.

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult CreateSub (TumourGroupSubcategory tumourSubgroupToCreate)

НИЖЕ ОТВЕЧАЕТ НА УТОЧНЕНИЕ В КОММЕНТАРИИ:

Ну, если вы отказываетесь от строго типизированного представления, вы можете просто сделать

ViewData["id"] = id;
ViewData["subGroupToCreate"] = ...

В качестве альтернативы вы можете сделать это во второй форме на стороне клиента с помощью Javascript или Jquery

...