2010-12-08 39 views
0

我有以下代碼:現在C#,ASP.NET MVC/MVC2:Url.Action - 連結具體參數,留下一出

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

,如果參數2是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}); 

編輯:

謝謝你的回答。問題是,我的鏈接中有空白參數。

我有以下途徑:

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

當參數2爲空,我想用其他的路由(一個無參數2)。

目前我只能用

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

new {param1 = Model.Param1} 

那麼正確的路線挑選archieve這一點。

回答

1

我跑了幾個快速測試,並假設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) {...} 

HTH, 布賴恩

+0

謝謝你的回答。我的問題是,這種方式我有我的網址中的空參數。我編輯了我的原始帖子。非常感謝您的幫助! – Chris 2010-12-08 21:34:42

+0

鑑於您的更新信息,您可能只能使用命名路線實現您想要的內容。以下鏈接介紹了它們的工作方式:http://dotnet.dzone.com/articles/named-routes-aspnet-mvc。實際上,如果將param2移動到路由模板的末尾,您可能不會使用命名路由,但不確定這是否是一個選項。 – 2010-12-09 01:24:24

0

你可以嘗試在你的控制器構造你的對象的參數列表,然後通過視圖的一部分模型

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

其中ParamList只是一個對象。它不會減少你的if/else邏輯,但它會從你的View中刪除所述的邏輯。