2015-12-04 3 views
0

Я изучал .NET MVC 5 и задал вопрос о квадратных скобках при использовании ModelBinder.квадратные скобки перед объектом C#

[HttpPost] 
     public ActionResult Submit([ModelBinder(typeof(CustomerBinder))] Customer cust) 
     { 
      return View("Customer", cust); 
     } 

Я не понимаю, как квадратные скобки работают над объектами. как данные из формы передаются в CustomerBinder? и вообще то, что является потоком кода параметра действия Submit.

заранее спасибо :)

+2

Те, называются атрибутами, и что они делают это объясняется в учебнике вы будете следовать. Если нет, вам нужно найти другой учебник. :) Откуда вы получили этот код? Объяснение всего потока MVC слишком велико, и это тоже документировано: [MSDN: Понимание процесса выполнения приложений MVC] (https://msdn.microsoft.com/en-us/library/dd381612 (v = vs .100) .aspx), [SO: Выполнение потока в MVC] (http://stackoverflow.com/questions/1982517/), [ASP.NET: жизненный цикл приложения ASP.NET MVC 5] (http: // www.asp.net/mvc/overview/getting-started/lifecycle-of-an-aspnet-mvc-5-application). – CodeCaster

+1

Кроме того, если вы только начинаете с MVC, вы хотите держаться подальше от пользовательских привязок к модели. Просто используйте стандартную модель связующего. Если вы хотите узнать больше о привязке к модели, см. [MSDN: Модели и проверка в ASP.NET MVC] (https://msdn.microsoft.com/en-us/library/dd410405 (v = vs.100) .aspx). – CodeCaster

+0

Некоторые тела говорят, что квадратные скобки, [], в этом контексте означает атрибут C#, аннотация данных, другая мудрая, называемая декларативным программированием. Вы объявляете то, что хотите в качестве атрибута, и компилятор позаботится об этом –

ответ

2

Они называются attributes, и есть turotial MSDN объяснить их here.

Атрибуты предоставляют мощный метод связывания метаданных или декларативной информации с кодом (сборками, типами, методами, свойствами и т. Д.). После того, как атрибут связан с программным сущностью, атрибут может быть запрошен во время выполнения с использованием метода, называемого отражением. Для получения дополнительной информации см Reflection

EDIT:

Чтобы конкретно рассмотреть, как MVC использует атрибуты, я рекомендовал бы продолжая свой MVC учебник, как это развернутый ответ. Если вы хотите, чтобы я нашел, here's a good one.

Вкратце,

  • Атрибут [HttpPost] ДАВАЙТЕ MVC знаю только, чтобы запросы POST прийти через к этому методу, а не другие HTTP Глаголы, как PUT или GET.
  • Атрибут [ModelBinder(typeof(CustomerBinder))] информирует контроллер, как к связующему, что вы хотите его использовать для объекта, который получает передается в
1

В данном коде:.

[HttpPost] 
public ActionResult Submit([ModelBinder(typeof(CustomerBinder))] Customer cust) 
{ 
    return View("Customer", cust); 
} 

Эти части:

  • [HttpPost] - это атрибут метода. Он модифицирует метод с дополнительными метаданными или метафункциональностью. В этом случае он ограничивает доступ HTTP к этому действию только POST глаголам.
  • [ModelBinder(typeof(CustomerBinder))] - еще один атрибут, но это изменяет конкретный аргумент метода вместо самого метода. В этом случае аргумент Customer cust. Атрибут ModelBinder позволяет вам явно указывать используемое связующее устройство модели, поэтому вы можете предоставить пользовательские привязки моделей для определенных действий.

По существу, MVC (и WebAPI) анализирует входящие значения формы в HTTP-запросе и прилагает все усилия (с использованием связующих устройств по умолчанию) для применения этих значений к аргументам метода. В подавляющем большинстве случаев это работает отлично. Иногда, однако, вы можете использовать для этого специальные функции. Таким образом, вы можете написать свои собственные привязки к модели, и есть разные способы сказать, как использовать их. Это один из таких способов, который применяет конкретное связующее устройство (CustomerBinder) к конкретному аргументу только этого конкретного метода.

Смежные вопросы