Вопрос

Кто-нибудь, пожалуйста, может сказать мне, почему я должен использовать NonAction?Я имею в виду, скажем, у меня есть форма с несколькими значениями отправки:Обновлять, Удалять или вставлять.Поскольку все кнопки отправки имеют одну и ту же общую форму, я переключаю значение отправки внутри контроллера и действую соответствующим образом.

Вот так:

public ActionResult asd(string submitButton){
     switch(submitButton){
         case "Insert":
             return Insert();
         // bla bla bla
     }
}

[NonAction]
public ActionResult Insert(){
    // some code inside here
    return View();
}

Еще раз, почему я должен использовать бездействие вместо чего-то подобного:

public void Insert(){
    // some code inside here
}

Другие советы

Стоит отметить, что необходимо использовать [NonAction] применяется только к общедоступным методам.Защищенные и частные методы не рассматриваются как действия.С тех пор, как ваш Update/Delete/Insert методы являются помощниками для asd(), частный метод был бы более подходящим для вашего сценария:

public ActionResult asd(string submitButton){
    switch(submitButton){
        case "Insert":
            return Insert();
        // bla bla bla
    }
}

ActionResult Insert(){
    // some code inside here
}

Если вы не используете атрибут [NonAction], тогда кто-то может вызвать ваше действие напрямую, вместо того, чтобы выполнять функцию asd

Чтение статьи Хаака

<цитата>

Любой общедоступный метод в классе контроллера можно вызвать через URL.

Иногда этого следует избегать.Например, если вы реализуете какой-либо интерфейс и, возможно, не захотите вызывать этот общедоступный метод, вы можете пометить его как NonAction

родовое слово

Я только что использовал [неэффективность] в нашем веб-API, чтобы украсить кучу методов контроллера (конечные точки), потому что у нас было решение в последнюю минуту, которое мы отложили доставку конкретных конечных точек.

Так полезно, если вы хотите избежать воздействия конечной точки API, но все же хочу сохранить реализацию для позже.

Так что я использовал этот атрибут, и это спасло меня много времени.

Я просто удалю его в следующем выпуске, и это просто будет там!

Атрибут NonAction делает действие недоступным с панели навигации.Например, если у вас есть действие, которое удаляет элементы в базе данных, вы должны добавить атрибут NonAction, чтобы сделать его недоступным для пользователей.

Во-первых, подумайте о ActionResult просто как о конкретном типе конструкции, возвращаемой MVC, которая обеспечивает особое удобство с точки зрения способа внутренней обработки ActionResult в рамках MVC.Поэтому тот факт, что что-то является ActionResult не обязательно означает « это должно быть общедоступным ».Фактически, любой общедоступный метод в контроллере MVC будет рассматриваться как метод действия, независимо от того, возвращает ли он ActionResult .

Таким образом, простое наличие типа возвращаемого значения, не ActionResult, не обязательно предотвратит предоставление этого метода как общедоступного действия, которое может быть вызвано черезURL.

Может быть много причин, по которым вы не хотите раскрывать метод как действие, которое может быть вызвано через URL-адрес, и в случае, если вы хотите «защитить» от этого, это когда вы используете [NonAction '] атрибут.

Это означает, что метод контроллера не является методом действия. Пример: [NonAction] public void IndexTest () {// Делаем что-нибудь} это очень полезный атрибут, когда видимость метода контроллера не может быть изменена на частную.

Это атрибут, который используется в методах, определенных модификаторами публичного доступа.На самом деле MVC Framework обрабатывает все общедоступные методы как URL-адреса, но если вы этого не хотите, вам нужно украсить метод атрибутом non action.То же самое можно сделать, сделав метод закрытым.

Пример атрибута NonAction приведен ниже. http://yogeshdotnet.com/non-action-attribute-in-mvc/

Если вы не хотите вызывать какие-то методы действия, вы должны пометить их атрибутом [NonAction] или сделать его закрытым

родовое слово

вы можете скопировать код и вставить его и увидеть результат. спасибо

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top