使用“ ActionName”属性为操作方法设置别名有什么好处?在为用户提供使用其他名称调用操作方法的选项方面,我确实没有看到太多好处。指定别名后,用户只能使用别名来调用操作方法。但是,如果需要这样做,那么用户为什么不更改操作方法的名称,而不是为其指定别名?
如果有人可以为我提供“ ActionName”使用示例,在该示例中可以提供很大的好处或最好使用它,那么我将不胜感激。
使用“ ActionName”属性为操作方法设置别名有什么好处?在为用户提供使用其他名称调用操作方法的选项方面,我确实没有看到太多好处。指定别名后,用户只能使用别名来调用操作方法。但是,如果需要这样做,那么用户为什么不更改操作方法的名称,而不是为其指定别名?
如果有人可以为我提供“ ActionName”使用示例,在该示例中可以提供很大的好处或最好使用它,那么我将不胜感激。
Answers:
它允许您以数字开始操作,或在标识符中包含.net不允许的任何字符。-最常见的原因是它允许您使用具有相同签名的两个动作(请参阅任何脚手架控制器的GET / POST Delete动作)
例如:您可以在网址操作名称http://example.com/products/create-product
vshttp://example.com/products/createproduct
或中使用破折号http://example.com/products/create_product
。
public class ProductsController {
[ActionName("create-product")]
public ActionResult CreateProduct() {
return View();
}
}
Controller
View或File上的方法。
Action
View()
则会遇到问题,因为View()
当前控制器中的所有引用都将解析为该名称,Action
而不是基础基本方法。因此,要解决此问题,您可以使用ActionName
属性允许View
操作,但在内部您可以调用它PublicView
或类似的方法。
return View("CreateProduct")
.NET或将无法找到诸如create-product.aspx
或create-product.cshtml
-至少我的代码是这样工作的。
如果您有两个具有相同签名且应该具有相同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 ActionResult ActorView()
{
return View(actorsList);
}
[ActionName("ActorViewOverload")]
public ActionResult ActorView(int id)
{
return RedirectToAction("ActorView","Home");
}
`
在这里,一个ActorView不接受任何参数,而另一个则接受int。第一种方法用于查看演员列表,另一种方法用于在删除ID为“ id”的项目后显示同一演员列表。无论何时需要方法重载,都可以将操作名称用作“ ActorViewOverload”。