"ActionName"属性是指为一个操作方法设置别名的好处是什么?我真的看不出它在提供用户使用其他名称调用操作方法方面有多大好处。在指定别名之后,用户只能使用别名调用操作方法。但如果需要这样做,那么为什么用户不改变操作方法的名称而是指定别名呢?
如果有人可以为我提供一个使用"ActionName"的示例场景,以证明它能够提供巨大的好处或最好使用,我将不胜感激。
"ActionName"属性是指为一个操作方法设置别名的好处是什么?我真的看不出它在提供用户使用其他名称调用操作方法方面有多大好处。在指定别名之后,用户只能使用别名调用操作方法。但如果需要这样做,那么为什么用户不改变操作方法的名称而是指定别名呢?
如果有人可以为我提供一个使用"ActionName"的示例场景,以证明它能够提供巨大的好处或最好使用,我将不胜感激。
使用这个特性可以在操作名称中包含数字或任何.NET不允许在标识符中使用的字符。 - 最常见的原因是它允许您拥有两个具有相同签名的操作(请参见任何脚手架控制器的GET/POST删除操作)
例如:您可以允许连接符在URL操作名称中 http://example.com/products/create-product
,而不是http://example.com/products/createproduct
或http://example.com/products/create_product
。
public class ProductsController {
[ActionName("create-product")]
public ActionResult CreateProduct() {
return View();
}
}
Controller
方法的动作名称,例如View或File。 - gramAction
命名为View()
,那么你会遇到问题,因为当前控制器中所有对View()
的引用都会解析到该Action
而不是基础方法。所以为了解决这个问题,你需要使用ActionName
属性来允许View
操作,但内部你会将其称为PublicView
或类似的名称。 - Buildstartedreturn View("CreateProduct")
,否则.NET会提示找不到create-product.aspx
或create-product.cshtml
之类的视图文件。至少我的代码是这样工作的。 - Achilles如果你有两个具有相同签名的操作(Action),它们应该拥有相同的URL,那么这也很有用。
一个简单的例子:
public ActionResult SomeAction()
{
...
}
[ActionName("SomeAction")]
[HttpPost]
public ActionResult SomeActionPost()
{
...
}
我在用户下载报告时使用它,以便他们可以轻松地将其csv文件直接打开到Excel中。
[ActionName("GetCSV.csv")]
public ActionResult GetCSV(){
string csv = CreateCSV();
return new ContentResult() { Content = csv, ContentEncoding = System.Text.Encoding.UTF8, ContentType = "text/csv" };
}
public class ProductsController
{
[ActionName("create-product")]
public ActionResult CreateProduct()
{
return View("CreateProduct");
}
}
当你需要实现方法重载时,这也是非常有帮助的。
public ActionResult ActorView()
{
return View(actorsList);
}
[ActionName("ActorViewOverload")]
public ActionResult ActorView(int id)
{
return RedirectToAction("ActorView","Home");
}
`
这里有两个ActorView,一个不接受参数,另一个接受int参数。 第一个方法用于查看演员列表,而另一个用于在删除ID为“id”的项目后显示相同的演员列表。 你可以在需要方法重载的地方使用动作名称“ActorViewOverload”。