C #, ASP.NET MVC / MVC2: Url.Action - ссылка с конкретными параметрами, оставляя один вне - PullRequest
0 голосов
/ 08 декабря 2010

У меня есть следующий код:

Url.Action("Index", "Home",  new {param1 = Model.Param1, param2 = Model.Param2} )

Теперь, если Param2 равен NullOrEmpty, я хочу связать, используя следующий код:

Url.Action("Index", "Home",  new {param1 = Model.Param1} )

Есть ли более простой способ сделать это или мне нужно будет сделать что-то вроде этого:

string myLinkVal = (Model.Param2 == string.IsNullOrEmpty()) ? 
    Url.Action("Index", "Home",  new {param1 = Model.Param1} ) :
    Url.Action("Index", "Home",  new {param1 = Model.Param1, param2 = Model.Param2} );

EDIT:

Спасибо за ваш ответ. Проблема в том, что в моей ссылке есть пустой параметр.

У меня есть следующие маршруты:

"/{param1}/{param2}/{controller}/{action}/{id}"
...
"/{param1}/{controller}/{action}/{id}"

Когда Param2 пуст, я хочу использовать другой маршрут (тот, у которого нет param2).

В настоящее время я могу архивировать это только с помощью

new {param1 = Model.Param1, param2 = Model.Param2}

или

new {param1 = Model.Param1}

Затем выбирается правильный маршрут.

Ответы [ 2 ]

1 голос
/ 09 декабря 2010

Я выполнил пару быстрых тестов, и предполагая, что Model.Param2 является строкой (как это выглядит в вашем примере кода), тогда MVC уже обрабатывает это.

<%= Html.ActionLink("Click Me", "TestAction", new { id = 5, name="" })%>
<%= Html.ActionLink("Click Me", "TestAction", new { id = 5 })%>

Оба приведенных выше результата приводятся к одному и тому же URL.

Для полноты вот как выглядит мой метод действия (хотя бы подпись):

public ActionResult TestAction(int id, string name)  {...}

НТН, Brian

0 голосов
/ 09 декабря 2010

Вы можете попытаться создать список параметров вашего объекта в контроллере, а затем передать его как часть viewModel

Url.Action("Index", "Home",  Model.ParamList);

, где ParamList - это просто объект.Это не уменьшит вашу логику if / else, но удалит указанную логику из вашего представления.

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