ASP.net MVC RouteLink и необязательные значения routeValues

Я пытаюсь понять, как условно установить routeValue, который является необязательным.

У меня есть

<%= Html.RouteLink("<<<","Products",new { page=(Model.Products.PageIndex) }) %>

Если посетитель нажимает на «категорию», я показываю только продукты этой категории, но если «категории» нет, я показываю все продукты.

Эти 2 URL-адреса будут действительными:

/Продукты/Страница

/Товары/Страница?category=cars

RouteLink находится в моем пейджере, поэтому я подумал, что могу каким-то образом передать параметр категории в ссылках в пейджере, чтобы сохранить категорию между страницами. Однако я не уверен, как мне справиться со случаем, когда категория не выбрана по сравнению с выбором категории.

Я знаю, что могу это сделать:

<%= Html.RouteLink("<<<","Products",new { page=(Model.Products.PageIndex), category=cars }) %>

Но можно ли справиться с обоими случаями, не создавая неудобного оператора if?


person dtc    schedule 20.05.2009    source источник


Ответы (2)


Это всего лишь идея, но нельзя ли просто передать пустой параметр категории?

<%= Html.RouteLink("<<<","Products",new { page=(Model.Products.PageIndex), category=(ViewData["CategoryName"]) }) %>

И в вашем productcontroller, где вы получаете страницу, просто проверьте, существует ли она или нет?

public ActionResult Index(int page, string category)
{
    ViewData["CategoryName"] = category;

    if(!string.IsNullOrEmpty(category)){
        //paging with category
    }else{
        //paging without category
    }
    return View("Create");
}

Или это то, что вы подразумеваете под «неудобным оператором if»?

person Peter    schedule 20.05.2009
comment
Спасибо за подробный пример. Я не знал, что если вы передадите пустое или нулевое значение в routValues, оно не выведет имя значения. Очень круто! - person dtc; 20.05.2009
comment
С удовольствием, рад, что смог помочь - person Peter; 21.05.2009

Если переменная cars имеет значение null или пустую строку, метод Html.RouteLink не будет автоматически добавлять параметр category в URL-адрес. Вам не нужно делать дополнительную проверку.

person Alexander Prokofyev    schedule 20.05.2009
comment
Спасибо. Может быть, это потому, что я не привык к этому, или, может быть, я просто тупой, но постепенно я начинаю понимать соглашения asp.net MVC... хотя мне это часто кажется «волшебным». - person dtc; 20.05.2009