Доступ к данным из Asp.Net MVC URL - PullRequest
0 голосов
/ 24 февраля 2010

Итак, если у меня есть URL-адрес, такой как mysite.com/user/1234/show, какой объект можно использовать в представлении, отображаемом для получения значения 1234 int в указанном выше URL-адресе? Например, я хочу иметь ссылку действия, которая снова использует идентификатор пользователя для следующего вызова действия контроллера, такого как mysite.com/user/1234/edit.

Спасибо

Ответы [ 4 ]

1 голос
/ 24 февраля 2010

Вам не нужно переходить непосредственно к URL-адресу для данных. Вместо этого добавьте параметр к вашему маршруту и ​​действию. Ваш маршрут может выглядеть примерно так: "{controller}/{id}/{action}", а ваши действия - что-то вроде:

    ViewResult Show(int userId){
      var viewData = new MyViewData(){
        UserID = userId
      };

      return View(viewData);
    }

Тогда, по вашему мнению, используйте Model.UserID.

РЕДАКТИРОВАТЬ : Это изначально больше работы, чем просто сделать (смею ли я это написать?)

Int32.Parse(Request["userId])

по вашему мнению. Тем не менее, подход, который я показал выше, является предпочтительным, так как вы будете использовать возможности маршрутизации и привязки MVC. Если вы хотите когда-нибудь изменить имя параметра, вам просто нужно исправить свой маршрут и имя параметра действия, в отличие от необходимости перебирать все ваше приложение, ища места, где вы извлекаете значения непосредственно из коллекции Request.

0 голосов
/ 24 февраля 2010

Измените маршрут по умолчанию в вашем global.asax.cs на -

routes.MapRoute(
    "Default",                                              // Route name
    "{controller}/{id}/{action}",                           // URL with parameters
    new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
);

Создайте UserController с помощью метода Show, подобного этому -

public class UserController : Controller
{
    public ActionResult Show(int id)
    {
        var model = new UserViewModel {Id = id};
        // Retrieve user from data layer and update model with other user details here
        return View(model);
    }

    public ActionResult Edit(int id)
    {
        // Deal with edit action in here
    }
}

public class UserViewModel
{
    public int Id { get; set; }
}

В представлении aspx убедитесь, что ваша страница наследуется от ViewPage<UserViewModel>, объявив в директиве страницы вашего представления aspx -

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<UserViewModel>" %>

Затем вы можете создать ссылку для редактирования на своей странице следующим образом -

<%=Html.ActionLink("Edit User", "Edit", new { id = Model.Id }) %>
0 голосов
/ 24 февраля 2010

Я полагаю, что вы можете получить это через свойство RouteData контекста запроса. Но гораздо более простым способом было бы просто добавить поле для него в вашу модель и установить контроллер там.

0 голосов
/ 24 февраля 2010

Это зависит от вашей схемы маршрутизации.взгляните на эти уроки

Создание пользовательских маршрутов

mysite.com / user / show / 1234

                routes.MapRoute(
                "User",                                        // Route name
                "user/show/{ID}",                              // URL with parameters
                new { controller = "User", action = "show" }   // Parameter defaults
            );

выше url, будем надеяться, позвоните, 'show' Действие для 'user' контроллера и передайте ID, 1234

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...