ActionName的目的

Has*_*him 81 asp.net-mvc asp.net-mvc-3

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

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

Bui*_*ted 130

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

例如:您可以在网址操作名称http://example.com/products/create-productvs http://example.com/products/createproduct或中允许破折号http://example.com/products/create_product.

public class ProductsController {

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

}
Run Code Online (Sandbox Code Playgroud)

  • 它还允许您使用可能是"Controller"上的方法的操作名称,如View或File. (45认同)
  • 如果你想你的名字``Action`视图()',那么你会遇到问题,因为到`查看所有引用()`在你目前的控制器将解析为`Action`,而不是底层的基础方法.因此,为了解决这个问题,你可以使用`ActionName`属性来允许`View`动作,但在内部你可以将它称为`PublicView`或类似的东西. (2认同)
  • 我认为你将不得不`返回View("CreateProduct")`或.NET将无法找到诸如`create-product.aspx`或`create-product.cshtml`之类的视图 - 至少我的代码可以工作像这样. (2认同)

Car*_*ñoz 59

如果您有两个具有相同签名且具有相同URL的Actions也很有用.

一个简单的例子:

public ActionResult SomeAction()
{
    ...
}

[ActionName("SomeAction")]
[HttpPost]
public ActionResult SomeActionPost()
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

  • 参数列表不是这里的重要部分。可能有一个更好的例子,关键是如果你需要,你可以做。 (2认同)

RHi*_*cke 38

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

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

  • 那是非常聪明的:) (2认同)