Как получить текущий идентификатор маршрута в представлении из URL (ASP.NET MVC)
в представлении, которое возвращается из URL-адреса, такого как /Controller/Action/1 (предполагая маршрут по умолчанию controller/action/id), как я могу получить доступ к идентификатору из представления?
Я не хочу добавлять его в словарь ViewData на уровне действия при обработке запроса.
7 ответов:
ViewData-это именно правильный способ сделать это.
другой вариант-передать в представление модель, содержащую идентификатор.
Edit: Не зная точно, что вы связываете, чтобы сделать, трудно дать более конкретный совет. Зачем вам нужен идентификатор, но не любые другие данные модели? Ваш контроллер действительно только отправляет поле Id в представление? Трудно представить, что это за сценарий.
Если значение ID действительно является единственной моделью информация, которая передается в ваше представление, затем вы можете использовать сам идентификатор в качестве модели. Тогда возвращаемое значение вашего метода действия будет
View(id)и Вам не нужно будет использовать ViewData.
добавление его в viewdata-это правильное решение. Что касается того, как его добавить, вы всегда можете добавить пользовательский
ActionFilterкоторый захватывает его из словаря маршрута и толкает его в viewdata.
мы можем передать
idкакRoute DataилиQueryString, так поддержка обоих из них Я рекомендую следующим образом:var routeValues=Url.RequestContext.RouteData.Values; var paramName = "id"; var id = routeValues.ContainsKey(paramName)? routeValues[paramName]: Request.QueryString[paramName];
Я думаю, что вы можете сразу использовать в действии url Url-адрес.RequestContext.RouteData.Значения["ИД"]
только мои два цента, но я всегда использую модели представления для передачи любых данных в мои представления. Даже если это так просто, как нужно
intкак идентификатор.Это делает доступ к этому значению тривиальным, так как MVC делает всю работу за вас.
для чего это стоит, я обычно имя мой взгляд модели как таковые:
{Controller}{ViewName}ViewModelЭто помогает держать вещи организовано в масштабе.
пример:
// ~/ViewModels/HomeEditViewModel.cs public class HomeEditViewModel { public int Id { get; set; } } // ~/Controllers/HomeController.cs public IActionResult Edit(int id) { return View(new HomeEditViewModel() { Id = id }); } // ~/Views/Home/Edit.cshtml @model HomeEditViewModel <h1>Id: @Model.Id</h1>
Comments