ActionName的目的

时间:2011-06-30 14:42:46

标签: asp.net-mvc asp.net-mvc-3

使用“ActionName”属性为操作方法设置别名有什么好处?在为用户提供调用具有其他名称的操作方法的选项时,我真的没有看到它的好处。指定别名后,用户只能使用别名调用操作方法。但是,如果需要,那么为什么用户不更改操作方法的名称而不是为其指定别名?

我真的很感激,如果有人能够提供一个使用“ActionName”的例子,它可以提供很大的好处,或者最好使用它。

7 个答案:

答案 0 :(得分:122)

它允许您使用数字开始操作或包含.net在标识符中不允许的任何字符。 - 最常见的原因是它允许您有两个具有相同签名的操作(参见任何脚手架控制器的GET / POST删除操作)

例如:您可以在网址操作名称http://example.com/products/create-producthttp://example.com/products/createproducthttp://example.com/products/create_product中添加短划线。

public class ProductsController {

    [ActionName("create-product")]
    public ActionResult CreateProduct() {
        return View();
    }

}

答案 1 :(得分:57)

如果您有两个具有相同签名且具有相同网址的操作,这也很有用。

一个简单的例子:

public ActionResult SomeAction()
{
    ...
}

[ActionName("SomeAction")]
[HttpPost]
public ActionResult SomeActionPost()
{
    ...
}

答案 2 :(得分:35)

我在用户下载报告时使用它,以便他们可以轻松地将他们的csv文件直接打开到Excel中。

[ActionName("GetCSV.csv")]
public ActionResult GetCSV(){
    string csv = CreateCSV();
    return new ContentResult() { Content = csv, ContentEncoding = System.Text.Encoding.UTF8, ContentType = "text/csv" };
}

答案 3 :(得分:6)

ActionName属性用于向外部世界公开具有不同名称的.NET操作方法。在下面的情况中,您可以使用ActionName属性:

  1. 对于SEO(搜索引擎优化),您希望在URL中公开比.NET操作方法名称更有意义的操作名称。

  2. 防止功能重载相关问题。假设您有一个DELETE操作方法名称,其GET和POST操作方法接受相同的参数。在这种情况下,您将收到编译时错误。要解决此问题,您可以重命名.NET方法,并使用ActionName属性,仍然可以保持暴露的相同名称。

  3. 有关详细说明,请访问ActionName attribute in ASP.NET MVC

答案 4 :(得分:2)

试试这段代码:

public class ProductsController
 {

    [ActionName("create-product")]
    public ActionResult CreateProduct() 
    {
        return View("CreateProduct");
    }

}

答案 5 :(得分:1)

此类表示用于操作名称的属性。它还允许开发人员使用与方法名称不同的操作名称。

答案 6 :(得分:0)

当您需要实现方法重载时,它也很有用。

 public ActionResult ActorView()
        { 

            return View(actorsList);
        }


        [ActionName("ActorViewOverload")]
        public ActionResult ActorView(int id)
        {              
            return RedirectToAction("ActorView","Home");
        }
`

这里一个ActorView不接受任何参数,另一个接受int。  第一种用于查看actor列表的方法和另一种用于在删除ID为“id”的项目后显示相同的actor列表。  无论何时需要方法重载,都可以将操作名称用作“ActorViewOverload”。