12

在 Asp.Net MVC 中,如果我用属性装饰一个操作方法,NonAction那么访问该站点的用户将不允许调用它。当我制作它时也会发生同样的情况private

那么两者之间有什么区别,是否有特殊目的用于NonAction制作哪个属性?

例如有什么区别

[NonAction]
public ActionResult SomeAction(){}

private ActionResult SomeAction(){}

在 asp.net MVC 的上下文中,我当然知道一个是public,另一个是private

4

2 回答 2

9

这是唯一的区别。当您想要一个方法具有可以使其成为操作的签名但您不想成为操作时,使用该属性。

一个使用的例子是动作方法调用来ActionResult为它们生成的方法:

[NonAction]
public JsonResult JsonInfo(string id, string value) {
  return Json(new { id = id, value = value });
}

public JsonResult GetBusInfo() {
  return JsonInfo("4", "Bus");
}

public JsonResult GetCarInfo() {
  return JsonInfo("8", "Car");
}

将其设为公开而不是私有的原因是其他控制器中的操作也可以使用它。

于 2013-02-09T10:23:40.477 回答
0

两者都与动作方法相同,您可以单独或一起使用它们。

[NonAction]           
        private ActionResult Details(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            FEED_TBL fEED_TBL = db.FEED_TBL.Find(id);
            if (fEED_TBL == null)
            {
                return HttpNotFound();
            }
            return View(fEED_TBL);
        }

如果像上面的代码一样声明它,那么当我们尝试转到详细信息操作方法时,它不会转到它。而是会显示错误。

{{ HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable.  Please review the following URL and make sure that it is spelled correctly.}}

这表明我们在视图上的详细信息链接确实找到了对详细信息操作方法和我们的控制器的任何引用。

于 2016-05-15T13:28:46.533 回答