2014-02-13 72 views
0

想知道是否有人可以幫助我。使用具有可選參數的Url.actions

我有一個MVC項目,在我看來,我使用url.action來鏈接到我的動作。我的動作可以處理3個可選參數Category,SubCategory和Name。但問題是子類別可能是空的,所以我需要名稱來替換URL.Action鏈接中的子類別。我有我的代碼工作,但我想知道是否有更好的方式來編寫此代碼。

我URL.Action:

if(subcategory == null) 
{ 
    <a href="@Url.Action("Action", "Controller", new { Parameter1 = Category, Parameter2 = subcategory, DataParameter3 = name})">Products</a> 
} 
else 
    <a href="@Url.Action("Action", "Controller", new { Parameter1 = Category, Parameter2 = name})">Products</a> 

任何一個是否知道這樣做的更好的辦法?

+0

而不是通用參數我的名字在控制器上,並在案件中的字段,其中名稱爲空我只是在控制器上測試它並相應地處理它 –

+0

您可以在控制器級別上處理,並且可以重定向到基於參數的另一個操作 – Sunny

回答

0

不知道這是好多了,但似乎至少在我的腦海清潔...

@functions{ 
IDictionary<string, object> GetRouteValues() 
{ 
    var vals = new Dictionary<string, object>(); 
    vals.Add("Parameter1", Category); 
    if (subcategory != null){ 
     vals.Add("Parameter2", subcategory); 
     vals.Add("Paremeter3", name); 
    } else { 
     vals.Add("Parameter2", name); 
    } 
    return vals; 
} 
} 

@Html.ActionLink("Products", "Action", "Controller", GetRouteValues(), null) 
0

這是其他的方式來寫<a>鏈接一次。首先,檢查subcategory爲空或不是:

@{ 
    string Parameter2 = name; 
    string DataParameter3 = name; 
    if(subcategory == null) Parameter2 = subcategory; else Parameter3 = null; 
} 

<a href="@Url.Action("Action", "Controller", new { Parameter1 = Category, Parameter2 = Parameter2 , DataParameter3 = DataParameter3 })">Products</a> 

而你的行動可能是這樣的:

public ActionResult Action(Parameter1, Parameter2, DataParameter3 = null) 
{ 
}