ASP.NET MVC 4 рдореЗрдВ рдореЛрдмрд╛рдЗрд▓ рдлреАрдЪрд░реНрд╕ рдХреНрдпрд╛ рд╣реИ
ASP.NET MVC 4 рдПрдХ рдмрд╣реБрдд рд╣реА рдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдФрд░ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдкреНрд░рддреАрдХреНрд╖рд┐рдд рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд╕рд╛рде рд╕рд╛рдордиреЗ рдЖрдпрд╛ - рдЕрдВрдЧреНрд░реЗрдЬреА рдХреЙрд▓ рдореЛрдмрд╛рдЗрд▓ рдлреАрдЪрд░реНрд╕ - рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдердиред рджреНрд╡рд╛рд░рд╛ рдФрд░ рдмрдбрд╝реЗ рдирд╛рдо рдиреЗ рддреБрд░рдВрдд рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдХрд░ рджрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирд╡рд╛рдЪрд╛рд░ рдХреЗ рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг рд╕реЗ рдереЛрдбрд╝рд╛ рднрд┐рдиреНрди рд╣реИред рд▓реЗрдХрд┐рди рдкрджреЛрдиреНрдирддрд┐ - рдкрджреЛрдиреНрдирддрд┐ рд╣реИред HTML 5 рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдкреЗрдЬ рдЯреЗрдореНрдкреНрд▓реЗрдЯ (рд▓реЗрдЖрдЙрдЯ) рдХреЗ рд╕рднреА рд╕рдВрджрд░реНрдн, рд╡реНрдпреВрдкреЛрд░реНрдЯ, рд╕реАрдПрд╕рдПрд╕ рдореАрдбрд┐рдпрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реБрдП - рдЗрди рд╕рднреА рдХрд╛ MVC рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИред
рдХреЗрд╡рд▓ рджреЛ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд╣реА рдврд╛рдВрдЪреЗ рдХреА рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдард╣рд░рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
- рдореЛрдмрд╛рдЗрд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рджреГрд╢реНрдп рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХрд╛ рдирд┐рд░реНрдорд╛рдг
- рдлреНрд▓рд╛рдИ рдкрд░ рдмрджрд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛ рджреГрд╢реНрдп рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рдПрдЧреА - рдЕрд░реНрдерд╛рддреН, рдЕрд▓рдЧ-рдЕрд▓рдЧ рджреГрд╢реНрдп рдХреЗ рдмреАрдЪ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ
рдФрд░ рдпрд╣рд╛рдВ рдпрд╣ рддреБрд░рдВрдд рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ "рдореЛрдмрд╛рдЗрд▓" рд╢рдмреНрдж рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдХреЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╣реИред MVC 4 рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХ рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдХрдИ рджреГрд╢реНрдп рдмрдирд╛рдиреЗ рдФрд░ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдХрд┐рд╕ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣реА рд╣реИ, рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рдореЛрдмрд╛рдЗрд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИрдВред
рд╕рд░рд▓ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ - ViewEngine рдореЗрдВ рдПрдХ "рд╣реБрдХ"
рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдпрд╣ ViewEngine рдореЗрдВ рд╕рд┐рд░реНрдл рдПрдХ "рд╣реБрдХ" рд╣реИред
рдЖрдк рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдХрд░рдгреЛрдВ рдпрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреГрд╖реНрда (рджреГрд╢реНрдп) рдмрдирд╛рддреЗ рд╣реИрдВред рдХреАрд╡рд░реНрдб рдЬреЛрдбрд╝рдХрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдирд╛рдо рджреЗрдВ:
- Catalog.cshtml
- Catalog.iPhone.cshtml
рдЙрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ рдЬрд┐рдирдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡рд╛рдВрдЫрд┐рдд рджреГрд╢реНрдп рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ - DisplayModeProvider рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╡рд╛рдВрдЫрд┐рдд рдирд╛рдо рдХреЗ рд╕рд╛рде рд╡рд╛рдВрдЫрд┐рдд DefaultDisplayMode рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред
DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode("iPhone") { ContextCondition = (context => context.GetOverriddenUserAgent().IndexOf ("iPhone", StringComparison.OrdinalIgnoreCase) >= 0) });
рд░рдирдЯрд╛рдЗрдо рдореЗрдВ, рдЬрдм рдирд┐рдпрдВрддреНрд░рдХ рд╡рд┐рдзрд┐ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рддреЛ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ ViewResult View Engine рдореЗрдВ рдкрд╛рд░рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, DisplayModeProvider рдХреА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ, рдпрд╣ рджреГрд╢реНрдп рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдмрджрд▓рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдХреНрдпрд╛ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рдмреЗрд╢рдХ рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдорд╛рдорд▓реЛрдВ рдореЗрдВред рдореБрдЦреНрдп рдиреБрдХрд╕рд╛рди рдпрд╣ рд╣реИ рдХрд┐
рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рд╕рднреА рджреГрд╢реНрдп рдПрдХ рд╣реА рдирд┐рдпрдВрддреНрд░рдХ рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдЬрд▓реНрджреА рдпрд╛ рдмрд╛рдж рдореЗрдВ, рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдмрди рдЬрд╛рддреА рд╣реИред
рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИ рдЬрдм рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЛ рди рдХреЗрд╡рд▓ рдбреЗрд╕реНрдХрдЯреЙрдк рдХрдВрдкреНрдпреВрдЯрд░, рд▓реИрдкрдЯреЙрдк рдФрд░ рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдмрд▓реНрдХрд┐ рдЯреАрд╡реА рдкрд░ рднреАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдореЗрдВ рд╕рд╛рдзрд╛рд░рдг рдлреЛрди, рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдФрд░ рдЯреИрдмрд▓реЗрдЯ рдХрдВрдкреНрдпреВрдЯрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдФрд░ рдЖрдкрдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ - рдпрджрд┐ рдЯреИрдмрд▓реЗрдЯ рдФрд░ рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдкрд░ рдЙрдкрд╕реНрдерд┐рддрд┐ рдЕрднреА рднреА рдПрдХ рд╣реА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд┐рдЬреЗрдЯ рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рд╣реЛ рд╕рдХрддреА рд╣реИ, рддреЛ рд╕рд╛рдзрд╛рд░рдг рд╕реЗрд▓ рдлреЛрди рдХреЗ рд▓рд┐рдП, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХрдИ рдФрд░ рд╣реИрдВ, рдПрдХ рд╣реА рдкреНрд░рд╕реНрддреБрддрд┐ рдФрд░ рдПрдХ рд╣реА рд╡реЗрдм рдпреВрдЖрдИ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред
рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдФрд░ рдЯреИрдмрд▓реЗрдЯ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЗрддрдирд╛ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ - рд╕реНрдХреНрд░реАрди рдЖрдХрд╛рд░ рдореЗрдВ рдЕрдВрддрд░ред рд▓реЗрдХрд┐рди рдПрдХ рдмрдбрд╝реЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ, рдЖрдк рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдпрд╛ рдЕрдзрд┐рдХ рдХрд╕реНрдЯрдо рдлрд╝рдВрдХреНрд╢рди рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рди рдХрд┐ рдХреЗрд╡рд▓ рдЪрд┐рддреНрд░реЛрдВ рдХрд╛ рдЖрдХрд╛рд░ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЯреАрд╡реА рд╕рдкреЛрд░реНрдЯ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдХрд╛рдо рд╣реИред рдлреБрд▓ рдПрдЪрдбреА рдХрд╛ рдорддрд▓рдм рдкрд┐рдХреНрд╕рд▓ рдореЗрдВ рдПрдХ рд╣реА рд╕реНрдХреНрд░реАрди рд╕рд╛рдЗрдЬ рд╕реЗ рд╣реИред рд▓реЗрдХрд┐рди рдкреНрд▓рд╕рд╕ рд╡рд╣реАрдВ рдЦрддреНрдо рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдкрдХреА рд╕рд╛рдЗрдЯ рдХреЛ рдЯреАрд╡реА рд╕реЗ рдЦреЛрд▓рд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдЗрд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЦреЛрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
- рдлрд┐рд▓рд┐рдкреНрд╕ рд╕реНрдорд╛рд░реНрдЯ рдЯреАрд╡реА - рдиреЗрдЯрдЯреАрд╡реА рдПрд╕рдбреАрдХреЗ - рд╕реАрдИ-рдПрдЪрдЯреАрдПрдордПрд▓ рд╡реЗрдмрд╕рд╛рдЗрдЯ
- рд╕реИрдорд╕рдВрдЧ рд╕реНрдорд╛рд░реНрдЯ рдЯреАрд╡реА - рд╕реИрдорд╕рдВрдЧ рдХрд╛ рдЕрдкрдирд╛ рдПрд╕рдбреАрдХреЗ рд╣реИ, рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рдиреЗрдЯрдЯреАрд╡реА рд╕реЗ рдмрд╣реБрдд рдЕрд▓рдЧ рд╣реИрдВ
- рдПрд▓рдЬреА рд╕реНрдорд╛рд░реНрдЯ рдЯреАрд╡реА
- XBOX 360 рдХреЗ рд╕рд╛рде - рдЗрдВрдЯрд░рдиреЗрдЯ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░
- рдкреНрд▓реЗрд╕реНрдЯреЗрд╢рди 3 рд╕реЗ
- Wii рд╕реЗ
- Google рдЯреАрд╡реА, рд╕реЛрдиреА рдЯреАрд╡реА рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд Google рдЯреАрд╡реА
- Apple рдЯреАрд╡реА рдХреЗ рд╕рд╛рде
- Boxee рдмреЙрдХреНрд╕, Kylo рдмреНрд░рд╛рдЙрдЬрд╝рд░, Roku рдФрд░ рдЕрдиреНрдп
рдЗрди рд╕рднреА рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрдЯ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдирд╛ рдереЛрдбрд╝рд╛ рдпрдерд╛рд░реНрдерд╡рд╛рджреА рд╣реИред рдпрджрд┐ рдЖрдк рдЙрди рд╕рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдпреЗ рдЙрдкрдХрд░рдг рдЖрдкрдХреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рд╛рдЗрдЯ рдХреЗ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдРрд╕рд╛ рдХрд░рдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИред рдФрд░ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ, рдореЗрд░рд╛ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░реЛ, рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, XBOX рд╕рд╛рдорд╛рдиреНрдп рдЗрдВрдЯрд░рдиреЗрдЯ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдЪрд▓рд╛рддрд╛ рд╣реИ, рд╕реНрдХреНрд░реАрди рдХреА рдЪреМрдбрд╝рд╛рдИ рд╕рд╛рдЗрдЯ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдбреЗрд╕реНрдХрдЯреЙрдк рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕реНрдХреНрд░реАрди рдкрд░ рдЬреЙрдпрд╕реНрдЯрд┐рдХ рдкрд░ рдХрд░реНрд╕рд░ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реНрдХреНрд░реАрди рдкрд░ рдмрдЯрди рджрдмрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрд╕реЗ рдЙрд╕ рдкрд░ рдХрд░реНрд╕рд░ рд▓реЗ рдЬрд╛рдиреЗ рдФрд░ рдЬреЙрдпрд╕реНрдЯрд┐рдХ рдкрд░ рдмрдЯрди рджрдмрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЯреИрдмрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдбрд╝реЗ рдЖрдпрддрд╛рдХрд╛рд░ рдмрдЯрди рдХреЗ рд╕рд╛рде рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИред рдХреЙрдореНрдмреЛрдХреНрд╕ рднреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИрдВред рдЬреЙрдпрд╕реНрдЯрд┐рдХ рдкрд░ рдкреЗрдЬ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдирд╛ рдХрд╛рдлреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
рд╕реНрдорд╛рд░реНрдЯрдЯреАрд╡реА рдкрд░, рдЖрдкрдХреЛ рдЗрд╕ рддрдереНрдп рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреЛрдИ рдХрд░реНрд╕рд░ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рдкрд░ рдКрдкрд░ / рдиреАрдЪреЗ / рдмрд╛рдПрдВ / рджрд╛рдПрдВ рдмрдЯрди рджрдмрд╛рдХрд░ рдкреГрд╖реНрда рдкрд░ рдмрдЯрди рдФрд░ рдЗрдирдкреБрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рддрд╛ рд╣реИред рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рд░рд┐рдореЛрдЯ рдкрд░ рдЕрдиреНрдп рдмрдЯрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрд╕рдбреАрдХреЗ рд╕реЗ рдкреНрд░рд▓реЗрдЦрди рдкрдврд╝рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ - рдХреБрдВрдЬреА рдХреЛрдб рдЕрд▓рдЧ рд╣реИрдВред
рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рдЕрдЧрд░ рдЖрдк рдЯреАрд╡реА рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдФрд░ рдЯреИрдмрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдХрдИ рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рднреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рдЕрдХреНрд╕рд░ рдЪрд░реНрдЪрд╛ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИред
рдпрд╣ рдЗрд╕ рджрд┐рд╢рд╛ рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рдФрд░ рдпрд╣ рд╕рд╡рд╛рд▓ рдЬрд▓реНрджреА рд╕реЗ рдЙрдарддрд╛ рд╣реИ рдХрд┐ рдбреЗрд╕реНрдХрдЯреЙрдк, рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдФрд░ рдЯреАрд╡реА рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдЙрдиреНрд╣реЗрдВ рди рдХреЗрд╡рд▓ рд╡реНрдпреВ рдореЗрдВ рдЕрд▓рдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореЙрдбрд▓ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ рдЬрдм рд╡рд┐рднрд┐рдиреНрди рдирд┐рдпрдВрддреНрд░рдХ рд╡рд┐рдзрд┐рдпрд╛рдВ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреА рд╣реИрдВред
рдмрджрд▓реЗ рдореЗрдВ рдХреНрдпрд╛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдмрд╛рдд рддреБрд░рдВрдд рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рд╛рдЗрдЯреЗрдВ рдмрдирд╛рдирд╛ рд╣реИ рдФрд░ рд╕рд╣реА рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдирд╛ рд╣реИред рд╣рдо рдРрд╕реЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдорд╛рдирддреЗ рд╣реИрдВред рдЖрдк рдХрд┐рд╕реА рднреА рд╕рдордп рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдкрд░ рд╡рд╛рдкрд╕ рдЖ рд╕рдХрддреЗ рд╣реИрдВред
рдмреЗрд╢рдХ, рдЖрдк рдПрдХ рд╣реА рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рд╕реБрдВрджрд░ рд╕рдорд╛рдзрд╛рди рдЪрд╛рд╣реВрдВрдЧрд╛ред
ASP.NET MVC 4 рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдХреЗрд╡рд▓ рдПрдХ рдЙрдкрдпреБрдХреНрдд рд╡рд┐рдХрд▓реНрдк рд╣реИред MVC рдПрдкреНрд▓рд┐рдХреЗрд╢рди (рдкреНрд░реЛрдЬреЗрдХреНрдЯ) рдХреЗ рдЕрдВрджрд░, рд╕рд╛рдЗрдЯ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдЕрдкрдиреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдЬреЗрдВрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ рд╣рдо рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕ рдбрд┐рд╡рд╛рдЗрд╕ / рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рднреЗрдЬреЗрдВред
рд╡рд╛рдВрдЫрд┐рдд рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд░реВрдЯрд┐рдВрдЧ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рд░реНрдЧ (рд░реВрдЯ) рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рдзрд╛ (рдмрд╛рдзрд╛) рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдиреБрдХрд╕рд╛рди рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╕рднреА рдорд╛рд░реНрдЧреЛрдВ рдкрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рддрд┐рдмрдВрдз рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдирд╣реАрдВ рднреВрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПредрдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдордиреЗ Chrome рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд╕рд╛рде рд╕рднреА рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд╖реЗрддреНрд░ рдмрдирд╛рдпрд╛ рд╣реИ, рддреЛ рдХреНрд╖реЗрддреНрд░ рдкрдВрдЬреАрдХрд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
public class ChromeAreaRegistration : AreaRegistration { public override string AreaName { get { return "Chrome"; } } public override void RegisterArea(AreaRegistrationContext context) { context.MapRoute( "Chrome_default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional }, new { isChromeBrowser = new IsChromeConstraint() } ); } }
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░рддрд┐рдмрдВрдз рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
public class IsChromeConstraint : IRouteConstraint { public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) { string userAgent = httpContext.Request.UserAgent; if (string.IsNullOrWhiteSpace(userAgent)) { return false; } return userAgent.Contains("Chrome"); } }
рдЙрд╕реА рд╕рдордп, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдореБрдЦреНрдп рдХреНрд╖реЗрддреНрд░ рд╣реИ, рдЬрд╣рд╛рдВ рдХреНрд░реЛрдо рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЕрдиреНрдп рд╕рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
public class DesktopAreaRegistration : AreaRegistration { public override string AreaName { get { return "Desktop"; } } public override void RegisterArea(AreaRegistrationContext context) { context.MapRoute( "Desktop_default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional }, new { isNotChromeBrowser = new IsNotChromeConstraint() } ); } }
рдЗрд╕рдореЗрдВ рд╣рдореЗрдВ рдПрдХ рдкреНрд░рддрд┐рдмрдВрдз рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ Chrome рдХреЛ рдХрд╛рдЯрдиреЗ рд╡рд╛рд▓реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рддрд╛ рд╣реИ:
public class IsNotChromeConstraint : IRouteConstraint { public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) { string userAgent = httpContext.Request.UserAgent; if (string.IsNullOrWhiteSpace(userAgent)) { return false; } return !userAgent.Contains("Chrome"); } }
рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рд╕рднреА рдорд╛рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдорд╛рд░реНрдЧреЛрдВ рдХреЛ рдКрдкрд░ рд╕реЗ рдиреАрдЪреЗ рддрдХ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдПрд░рд┐рдпрд╛рд░рд╛рдЗрдЬреЗрд╢рди рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдирдХреЗ рдЖрджреЗрд╢ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрдХрд░ - рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдорд╛рд░реНрдЧреЛрдВ рдХреЛ рдПрдХ рдЬрдЧрд╣ - Global.asax рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдлрд┐рд░ рдЖрдк рдЧрд╛рд░рдВрдЯреА рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрд░реЛрдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА рдЬрд╛рдВрдЪ рд╣рдореЗрд╢рд╛ рдкрд╣рд▓реЗ рд╣реЛрдЧреАред
рдЙрдкрд╕рдВрд╣рд╛рд░
рдпрджрд┐ рдЖрдк рдЗрд╕рд╕реЗ рдердХ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╣рдореЗрд╢рд╛ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдбреЛрдореЗрди рдкрд░ рд╣реЛрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред