ActionName 的目的

问题描述 投票:0回答:6

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

如果有人能为我提供一个在可以提供巨大好处或最好使用的场景中使用“ActionName”的示例,我将非常感激。

asp.net-mvc asp.net-mvc-3
6个回答
139
投票

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

例如:您可以允许在 URL 操作名称中使用破折号

http://example.com/products/create-product
vs
http://example.com/products/createproduct
http://example.com/products/create_product

public class ProductsController {

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

}

62
投票

如果您有两个具有相同参数列表和返回类型的操作(仅方法名称不同,但应该具有相同的操作名称),这也很有用。

一个简单的例子:

public ActionResult SomeAction()
{
    ...
}

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

39
投票

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

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

2
投票

试试这个代码:

public class ProductsController
 {

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

}

1
投票

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

 public ActionResult ActorView()
        { 

            return View(actorsList);
        }


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

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


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.