ASP.NET - параметр ActionResult всегда возвращается ноль при передаче строки - почему? - PullRequest
8 голосов
/ 11 мая 2009

Я только начинаю свой первый проект с типом проекта ASP.NET MVC, и я создаю страницу Details, где вместо передачи шаблонов (int id) я бы хотел вместо этого передать строку. Но когда я нахожусь в режиме отладки и ввожу это в URL, «myString» имеет значение null. Почему так? Должен ли я что-то еще изменить?

Так что, если я перейду к URL и введу это:

http://localhost:2345/Bank/EmployeeDetails/3d34xyz

public ActionResult EmployeeDetails(string myString) // myString is null
{
     return View();
}

Ответы [ 5 ]

36 голосов
/ 11 мая 2009

В вашем файле Global.asax.cs по умолчанию будет отображаться следующий маршрут:

routes.mapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional });

Это означает, что URL-адрес, подобный http://localhost:2345/Bank/EmployeeDetails/3d34xyz, перейдет в контроллер Bank, действие EmployeeDetails и передаст значение 3d34xyz в параметр с именем id. Передача строки вполне допустима, но для того, чтобы она работала, у вас есть два варианта:

1) Переименуйте переменную в id в вашем методе действия.

public ActionResult EmployeeDetails(string id) { ... }

2) Добавьте другой маршрут, который соответствует любому имени, которое вы хотите для вашей строки. Убедитесь, что он более конкретен, чем маршрут по умолчанию, и поместите его перед маршрутом по умолчанию в файле Global.asax.cs.

routes.mapRoute(
    "BankEmployeeDetails"
    "Bank/EmployeeDetails/{myString}"
    new { controller = "Bank", action = "EmployeeDetails", myString = UrlParameter.Optional });

Это передаст значение по умолчанию от null до myString, если в URL не передано значение, но с указанным вами URL вы передадите значение 3d34xyz.

4 голосов
/ 11 мая 2009

Если вы не изменили маршруты по умолчанию (в вашем Global.asax.cs):

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

Метод ожидает, что он будет назван "id".

3 голосов
/ 11 мая 2009

Переименуйте myString в id, если вы используете таблицу маршрутов по умолчанию.

2 голосов
/ 11 мая 2009

Измените имя myString на id.

0 голосов
/ 12 декабря 2017

У меня возникла та же проблема, вам просто нужно указать идентификатор на странице, где вы указали гиперссылку для деталей (на странице банка здесь)

 @Html.ActionLink("Details", "Details", new { id=""}) 

Это решило мою проблему, надеюсь, это поможет вам.

Это для MVC 5.

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