Как получить текущий идентификатор маршрута в представлении из URL (ASP.NET MVC)



в представлении, которое возвращается из URL-адреса, такого как /Controller/Action/1 (предполагая маршрут по умолчанию controller/action/id), как я могу получить доступ к идентификатору из представления?



Я не хочу добавлять его в словарь ViewData на уровне действия при обработке запроса.

504   7  

7 ответов:

Я думаю, что это то, что вы ищете:

<%=Url.RequestContext.RouteData.Values["id"]%>

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>

Я только что использовал <%= model.id %> и работает

Comments

    Ничего не найдено.