ASP.NET MVC 3 маршрутизация - PullRequest
       7

ASP.NET MVC 3 маршрутизация

1 голос
/ 22 апреля 2011

Я пытаюсь создать маршрут.

Что такое

/emlak/TITLE/number.aspx

например

/emlak/Here_is_your_best_property/123456.aspx

Global.asax:

* * 1010

Мой контроллер

namespace emrex.Controllers
{
    public class EmlakController : Controller
    {
        //
        // GET: /Emlak/

        public ActionResult Index(String productId, String deli)
        {
            return View();
        }

    }
}

и я получаю следующую ошибку:

Ошибка сервера в приложении '/'.

Ресурс не найден.

Спасибо за помощь.

Ответы [ 5 ]

4 голосов
/ 23 апреля 2011

Не указывайте параметры URL по умолчанию в качестве ограничений (как вы это сделали)

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

routes.MapRoute(
    // route name
    "Product",

    // Route URL definition
    "{controller}/{deli}/{productId}",

    // route values defaults
    new { controller = "emlak", action = "Index" },

    // route values constraints
    new { productId = UrlParameter.Optional , deli = UrlParameter.Optional  }
);

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

routes.MapRoute(
    "Product",
    "{controller}/{deli}/{productId}",
    new {
        controller = "Emlak",
        action = "Index",
        productId = UrlParameter.Optional,
        deli = UrlParameter.Optional
    }
);

Это определенно должно работать, если у вас нет других определений маршрута или вы не используете код, который вы предоставили.

3 голосов
/ 22 апреля 2011

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

     routes.MapRoute(
    "Product",
    "{controller}/{deli}/{productId}",
    new { controller = "emlak", action = "Index", productId = UrlParameter.Optional, deli = UrlParameter.Optional }
);

Попробуй - какая разница?

1 голос
/ 13 марта 2012

Вы должны удалить ограничения и предоставить значения для "productId" и "deli".

routes.MapRoute(
    "Product",
    "{controller}/{deli}/{productId}",
    new { controller = "emlak", action = "Index", productId = 123 , deli = "xyz"  }
);

OR

сделать ваши параметры необязательными при работе в вашем контроллере

public ActionResult Index(String productId = 0, String deli = "")
{
    return View();
}
1 голос
/ 22 апреля 2011

Это может помочь, так как я еще не обновил MVC 1.0 ...

Не думаю, что вам нужна часть URL-адреса .aspx, потому что MVC по-разному обрабатывает создание приложений. Также вам необходимо расширение .mvc, если вы используете IIS 6 (например, «emlak.mvc / TITLE / number»); IIS 7 должен быть правильно создан с помощью «emlak / TITLE / number».

0 голосов
/ 23 апреля 2011

Ваше действие требует, чтобы гастроном и productId были предоставлены, и ваш маршрут не предоставляет значения по умолчанию для обоих.Либо добавьте действие Index, которое не требует ввода каких-либо значений, либо добавьте значения по умолчанию для ваших переменных.

counsellorben

...