Asp.net mvc 使用带有可选参数的Url.actions

Asp.net mvc 使用带有可选参数的Url.actions,asp.net-mvc,asp.net-mvc-4,parameters,actionlink,url.action,Asp.net Mvc,Asp.net Mvc 4,Parameters,Actionlink,Url.action,不知道有没有人能帮我 我有一个MVC项目,在我看来,我正在使用url.action链接到我的操作。我的操作可以处理3个可选参数:类别、子类别和名称。但问题是子类别可能为空,所以我需要名称来替换URL.Action链接中的子类别。我有我的代码工作,但我想知道是否有一个更好的方式写这段代码 我的URL。操作: if(subcategory == null) { <a href="@Url.Action("Action", "Controller", new { Parameter1 =

不知道有没有人能帮我

我有一个MVC项目,在我看来,我正在使用url.action链接到我的操作。我的操作可以处理3个可选参数:类别、子类别和名称。但问题是子类别可能为空,所以我需要名称来替换URL.Action链接中的子类别。我有我的代码工作,但我想知道是否有一个更好的方式写这段代码

我的URL。操作:

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>
if(子类别==null)
{
}
其他的

有人知道更好的方法吗

不确定这是否更好,但至少在我看来更干净

@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)
@函数{
IDictionary GetRouteValues()
{
var vals=新字典();
VAL.Add(“参数1”,类别);
如果(子类别!=null){
VAL.Add(“参数2”,子类别);
VAL.Add(“Paremeter3”,名称);
}否则{
VAL.Add(“参数2”,名称);
}
返回VAL;
}
}
@ActionLink(“产品”、“操作”、“控制器”、GetRouteValues(),null)

另一种方法是编写一次链接。首先,检查
子类别
是否为空:

@{
   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>

我将控制器上的字段命名为通用参数,而不是通用参数。如果名称为null,我只需在控制器上测试并相应地处理它。您可以在控制器级别上处理,并可以根据参数重定向到另一个操作
public ActionResult Action(Parameter1, Parameter2, DataParameter3 = null )
{
}