【问题标题】:Using Url.actions with optional parameters使用带有可选参数的 Url.actions
【发布时间】:2014-03-12 16:00:10
【问题描述】:

只是想知道是否有人可以帮助我。

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

我的网址。操作:

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>

有没有人知道这样做的更好方法?

【问题讨论】:

  • 我在控制器上命名字段而不是通用参数,如果名称为空,我只需在控制器上测试它并相应地处理它
  • 您可以在控制器级别处理并可以根据参数重定向到另一个操作

标签: asp.net-mvc asp.net-mvc-4 parameters actionlink url.action


【解决方案1】:

写一次&lt;a&gt;链接是另一种方式。首先检查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 )
{
}

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-04-24
      • 2021-02-28
      • 1970-01-01
      • 2019-02-06
      • 1970-01-01
      • 2016-10-17
      • 1970-01-01
      • 2021-10-18
      • 1970-01-01
      相关资源
      最近更新 更多