Субъективные общности (взять с щепоткой соли):
Во-первых, вы используете компанию (единственное число) для компаний, но затем вы используете контакты (множественное число) для контактов. Со структурной точки зрения в этом нет ничего плохого, но ваши пользователи будут вам благодарны, если вы согласны с множителями. Я бы использовал множественное число в обоих случаях, но это только мои предпочтения ... это больше похоже на английский.
Вы также используете нижний регистр для контактов, но верхний регистр для компании. Не выглядит профессионально.
Следующее, что сбивает с толку, заключается в том, что вы используете два параметра {id}, один для компаний, один для контактов. Я предполагаю, что это идентификаторы для компании и контактов соответственно. Но я в замешательстве, но, будучи человеком, я могу вывести контекст в отличие от компьютера. Так что вам лучше указать параметры в ваших маршрутах. То есть:
/Companies/{CompanyId}/Contacts/{ContactId}/[action]
Ответ на ваш вопрос с примером:
Мне кажется, ты не понимаешь маршруты должным образом. Если бы вы это сделали, ваш вопрос был бы более конкретным.
Параметры вашего маршрута могут быть получены из нескольких источников, в зависимости от того, как запрашивается маршрут.
Вы можете жестко закодировать это в ссылку. Или, что более полезно, ваша регистрация маршрута была бы разработана, чтобы отлавливать запросы, которые сопоставляются с вашими подписями Action.
Например, у меня есть приложение электронного обучения с преподавателями, учениками, курсами и ступенями (т. Е. Ступени похожи на разделы курса, ученик последовательно продвигается по курсу)
Регистрация маршрута выглядит примерно так:
Регистрация маршрута или района:
context.MapRoute(
"StepDisplay",
"Course/{CourseId}/Step/{StepOrder}/Pupil/{PupilName}/{TutorName}",
new { controller = "Course", action = "Display", TutorName = UrlParameter.Optional },
new[] { "ES.eLearningFE.Areas.Courses.Controllers" }
);
Этот маршрут получит запрос от следующей ссылки ActionLink:
ActionLink в представлении:
@Html.ActionLink(@StepTitle, MVC.Courses.Course.Actions.Display(Model.CourseId, step.StepOrder, Model.Pupil.UserName, tutorName))
Теперь мне просто нужно показать подпись действия Display:
CoursesController:
public virtual ActionResult Display(int CourseId, int StepOrder, string PupilName, string TutorName)
Здесь следует отметить несколько вещей:
Что я могу позвонить по этому конкретному маршруту, дав пользователю ссылку для нажатия.
Я создаю эту ссылку с помощью помощника Html.ActionLink
Я использовал пакет nuget Дэвида Эббо для того, чтобы я мог указать вызываемое действие и его параметры. Под этим я подразумеваю указание параметра ActionResult помощника Html.ActionLink с помощью:
MVC.Courses.Course.Actions.Display (Model.CourseId, step.StepOrder, Model.Pupil.UserName, tutorName)
Если вы думаете об этом, то, что делают маршруты, это переводит URL запроса в действие, поэтому параметры моего маршрута - это либо имя контроллера, либо имя действия, либо имена параметров в сигнатуре действия. .
Теперь вы можете понять, почему два разных параметра маршрута называются одинаково
имя - плохая идея (во многом потому, что она не сработает).
Итак, посмотрите на ваши подписи действий и спроектируйте свои маршруты и ссылки действий, чтобы все сошлось воедино.
MVC не работает по волшебству !! (Хотя то, как он использует соглашения об именах, может заставить вас поверить в это)