Asp.net mvc ActionName的目的
使用“ActionName”属性为操作方法设置别名有什么好处?我真的看不出它有什么好处,因为它为用户提供了使用其他名称调用动作方法的选项。指定别名后,用户只能使用别名调用操作方法。但是如果这是必需的,那么为什么用户不更改操作方法的名称而不是为其指定别名呢 如果有人能给我举一个例子,说明“ActionName”在某个场景中的使用,我会非常感激,因为在这个场景中,“ActionName”可以带来巨大的好处,或者是最好的使用方式 它允许您以数字开始操作,或在标识符中包含.net不允许的任何字符。-最常见的原因是它允许您有两个具有相同签名的操作(请参阅任何脚手架控制器的GET/POST Delete操作) 例如:您可以在url操作名称Asp.net mvc ActionName的目的,asp.net-mvc,asp.net-mvc-3,Asp.net Mvc,Asp.net Mvc 3,使用“ActionName”属性为操作方法设置别名有什么好处?我真的看不出它有什么好处,因为它为用户提供了使用其他名称调用动作方法的选项。指定别名后,用户只能使用别名调用操作方法。但是如果这是必需的,那么为什么用户不更改操作方法的名称而不是为其指定别名呢 如果有人能给我举一个例子,说明“ActionName”在某个场景中的使用,我会非常感激,因为在这个场景中,“ActionName”可以带来巨大的好处,或者是最好的使用方式 它允许您以数字开始操作,或在标识符中包含.net不允许的任何字符。-最常
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();
}
}
如果您有两个具有相同签名的操作,并且它们应该具有相同的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”。请尝试以下代码:
public ActionResult ActorView()
{
return View(actorsList);
}
[ActionName("ActorViewOverload")]
public ActionResult ActorView(int id)
{
return RedirectToAction("ActorView","Home");
}
`
public class ProductsController
{
[ActionName("create-product")]
public ActionResult CreateProduct()
{
return View("CreateProduct");
}
}
此类表示用于操作名称的属性。它还允许开发人员使用不同于方法名的操作名。它还允许您使用可能是
控制器上的方法的操作名,如视图或文件。@gram,我们不能在控制器上调用普通方法而不指定别名吗?我想我们可以。如果您想命名您的操作
视图()
,那么您就会遇到问题,因为当前控制器中对视图()
的所有引用都将解析为该操作
,而不是底层基本方法。因此,为了解决这个问题,您可以使用ActionName
属性来允许视图
操作,但在内部,您可以将其称为PublicView
或类似的东西。我想您必须返回视图(“CreateProduct”)
或.NET会唠叨找不到视图,例如创建产品.aspx
或创建产品.cshtml
——至少我的代码是这样工作的。@gram那你怎么做呢?显然不带属性。有意义,但在什么情况下使用不带参数的HttpPost?我知道有可能的原因,比如返回JSON和使用GET避免安全问题。我只是想知道你的是什么。参数列表不是这里的重要部分。也许有一个更好的例子,关键是如果需要,你可以这样做。我们可以将“SomeActionPost”替换为“SomeAction”,那么ActionName有什么用呢?你可以';如果两个方法具有相同的参数,则不能将它们命名为相同的方法。在这种情况下,[ActionName]将操作(而不是方法)重命名为在ASP中注册的操作。NET MVC将表路由到目标表。最常见的原因是当您同时使用GET和POST方法并且签名相同时。请看@Carlos Muñoz的回答,这非常聪明:)