ASP .NET MVC 3. Ajax.ActionLink рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рддрд╕реНрд╡реАрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╕рдВрджреАрджрд╛ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде habrahabrov рдкрд░ рддрд╛рд░рд╛рдВрдХрди рдЪрд┐рд╣реНрди

рдпрд╣ рд▓реЗрдЦ рд╕рд╣рд╛рдпрдХ рд╡рд┐рдзрд┐ Ajax.ActionLink, рдпрд╛ рдмрд▓реНрдХрд┐ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд┐рдзрд┐ Ajax.ActionImageLink рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЪрд┐рддреНрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд▓рд┐рдВрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рдмрдирд╛рдПрдВрдЧреЗред

рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдЕрдЬрд╛рдХреНрд╕, рдПрдПрд╕рдкреА .NET рдПрдорд╡реАрд╕реА 3 рдФрд░ рдЙрдирдХреЗ рд╕рд╛рдЭрд╛рдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рддреНрд╡рд░рд┐рдд рдкрд░рд┐рдЪрдпред

AJAX (рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдПрдХреНрд╕рдПрдордПрд▓ - "рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдПрдХреНрд╕рдПрдордПрд▓") рдПрдХ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдбреЗрдЯрд╛ рдХреЗ "рдкреГрд╖реНрдарднреВрдорд┐" рд╡рд┐рдирд┐рдордп рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИред рдирддреАрдЬрддрди, рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╕рдордп, рд╡реЗрдм рдкреЗрдЬ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддреЗрдЬ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред

ASP .NET MVC рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реВрдкрд░реЗрдЦрд╛ рд╣реИ рдЬреЛ ASP .NET рддрдХрдиреАрдХ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдореЙрдбрд▓-рд╡реНрдпреВ-рдХрдВрдЯреНрд░реЛрд▓рд░ ( MVC ) рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред

ASPред NET MVC 3 рдореЗрдВ AJAX рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдПрдХреНрд╢рди рддрд░реАрдХреЗ рд╣реИрдВ , рд▓реЗрдХрд┐рди рд╣рдо Ajax.ActionLink рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╣реИ:

Ajax.ActionLink


Ajax.ActionLink - рдПрдХ рдРрд╕реА рд╡рд┐рдзрд┐ рдЬреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдирд╛рдИ рдЧрдИ рд▓рд┐рдВрдХ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рд╕реЗ рд╕рд░реНрд╡рд░ рдХреЛ рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдкреГрд╖реНрда рдХреЗ рдЖрдЧреЗ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 12 рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ - рдиреАрдЪреЗ рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ рдЬреЛ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:

рдПрдорд╡реАрд╕реА 3 рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЕрдЬрд╛рдХреНрд╕ рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ / рд▓рд┐рдкрд┐рдпреЛрдВ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╣реИрдВ:


рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди


рдПрдХ рдЫрд╡рд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд▓рд┐рдВрдХ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рддрд╛рд░рд╛рдВрдХрди рдЪрд┐рд╣реНрди), рдЬрд┐рд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рд╕реЗ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЕрдиреБрд░реЛрдз рд╣реЛрдЧрд╛, рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдЫрд╡рд┐ рдХрд╛ рдмрджрд▓рдирд╛, рдЯреВрд▓рдЯрд┐рдк:

рдЫрд╡рд┐

Microsoft рдиреЗ рд╣рдореЗрдВ рдЕрдЬрд╛рдХреНрд╕ рдПрдХреНрд╢рдирд▓рд┐рдВрдХ рд╣реЗрд▓реНрдкрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдБрдЪреЗ рдХрд┐ рдпрд╣рд╛рдБ рдмрд╛рдЗрдХ рдХреЗ рдмрд┐рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рд╣рд╛рдпрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

1. рдПрдХ рд░рд┐рдХреНрдд ASP .NET MVC 3 рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдБ


рдЫрд╡рд┐

рджреГрд╢реНрдп рдЗрдВрдЬрди рдореЗрдВ, рд░реЗрдЬрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред

рдЫрд╡рд┐

2. рдПрдХ рд╣реЛрдордХрдВрдЯреНрд░реЛрд▓рд░ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рд╕реВрдЪрдХрд╛рдВрдХ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ


рдЫрд╡рд┐

рд╣рдорд╛рд░реЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдорд╛рд╕реНрдЯрд░ рдкреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ ~ / Views / Shared / _Layout.cshtml рдЪреБрдиреЗрдВред

рдЫрд╡рд┐

рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЕрдм рд╣рдореЗрдВ рдЕрдкрдиреЗ рдЕрдЬрд╛рдХреНрд╕ рд╕рд╣рд╛рдпрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд┐рдзрд┐ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

3. рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд┐рдзрд┐ Ajax.ActionImageLink рдмрдирд╛рдПрдБ


рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░реВрдЯ рдореЗрдВ рдХреЛрд░ рдлрд╝реЛрд▓реНрдбрд░ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЗрд╕рдореЗрдВ рдПрдХ рдирдпрд╛ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ Extensions.cs

рдЫрд╡рд┐

рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐рдпрд╛рдБ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдБ рдкрдврд╝реЗрдВред

рд╣рдо рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред рдФрд░ рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реА рдЫрд╡рд┐ рд▓рд┐рдВрдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо HTML рдорд╛рд░реНрдХрдЕрдк рдФрд░ habrahabr.ru рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рд▓реЗрддреЗ рд╣реИрдВ, рдлрд┐рд░ рдХрдВрдЯреЗрдирд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рджреЛ рд░рд╛рдЬреНрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛:
<div class="favourite"> <a class="add" title="  " href="#"></a> </div> <div class="favourite"> <a class="remove" title="  " href="#"></a> </div> 


рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рд╕рдм рдХреБрдЫ рдХрд╛рдЯрдХрд░, рд╣рдо рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдЖрддреЗ рд╣реИрдВ рдХрд┐ рдХрдВрдЯреЗрдирд░ (рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдмреНрдЬреЗрдХреНрдЯ рдЕрдкрдбреЗрдЯрдЯрд╛рд░реНрдЗрдЧреНрдб рд╣реИ) рдПрдХ div рд╣реЛрдЧрд╛, рдФрд░ рд╣рдорд╛рд░реА рд╡рд┐рдзрд┐ рдХреЛ HTML рдорд╛рд░реНрдХрдЕрдк рдХреЛ рдПрдХ рдмрджрд▓рддреЗ рд╡рд░реНрдЧ рдФрд░ рд╢реАрд░реНрд╖рдХ рдХреЗ рд╕рд╛рде рд▓рд┐рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

* рдпрд╣рд╛рдВ рд▓реЗрдЦрдХ рдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рд╕реЛрдЪрд╛, рдФрд░ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рд╕рдм рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддрд░реАрдХреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдП рдмрд┐рдирд╛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ :
 @Ajax.ActionLink(" ", "Hello", "World", null, new AjaxOptions() { }, new { @title= Model.inFavourite? "  " : "  ", @class = Model.inFavourite? "add" : "remove" }) 

рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд╢реНрдЪрдп рдХрд░ рд▓рд┐рдпрд╛ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реЛрдЧрд╛, рдФрд░ рдереЛрдбрд╝рд╛ рджрд┐рд▓рдХрд╢ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рдЙрд╕рдиреЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдп рдХреЛ рдЬрдЯрд┐рд▓ рдмрдирд╛ рджрд┐рдпрд╛ ред *

рд╕рдм рдХреБрдЫ рдХрд╛рдЯ рджреЗрдирд╛ ... рдмрд╣реБрдд рдХреБрдЫ рдЬреЛрдбрд╝рддреЗ рд╣реБрдП, рдЕрддрд┐рд╢реНрдпреЛрдХреНрддрд┐рдкреВрд░реНрдг рдЬреЛрдбрд╝рддреЗ рд╣реБрдП, рд╣рдо рдЗрд╕ рддрдереНрдп рдкрд░ рдЖрддреЗ рд╣реИрдВ рдХрд┐ рдХрдВрдЯреЗрдирд░ (рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдмреНрдЬреЗрдХреНрдЯ UpdateTargetId рд╣реИ) рдПрдХ div рд╣реЛрдЧрд╛, рдФрд░ рд╣рдорд╛рд░реА рд╡рд┐рдзрд┐ рдХреЛ HTML рдорд╛рд░реНрдХрдЕрдк рдХреЛ рдПрдХ рд▓рд┐рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдмрджрд▓рддреЗ рд╢реАрд░реНрд╖рдХ рдХреЗ рд╕рд╛рде рдПрдХ рдЫрд╡рд┐ рдФрд░ рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП рдкрде рд╣реИред
 <div id="favourite"> <a href="/Home/AddOrRemoveFavourite"> <img src="/Content/images/star-off.png" title="  " /> </a> </div> <div id="favourite"> <a href="/Home/AddOrRemoveFavourite"> <img src="/Content/images/star-on.png" title="  " /> </a> </div> 

рдиреЛрдЯ:
рдЖрдк рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдореЗрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ / рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░, рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ - AddOrRemoveFavourite ред
рдФрд░ рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реА рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐ рдХрд╛ рдврд╛рдВрдЪрд╛ рдиреАрдЪреЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
  public static IHtmlString ImageActionLink(this AjaxHelper helper, string actionName, bool inFavourite, AjaxOptions ajaxOptions) { } 

рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ:
  1. рдХреНрд░рд┐рдпрд╛рдирд╛рдо - рдирд┐рдпрдВрддреНрд░рдХ рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо (AddOrRemoveFavourite);
  2. inFavourite - рдЗрд╕ рдмрд╛рдд рдХрд╛ рд╕рдВрдХреЗрдд рдХрд┐ рдХреНрдпрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд╕рдВрджреАрджрд╛ рдореЗрдВ рдЬреЛрдбрд╝ рджреА рдЧрдИ рд╣реИ;
  3. ajaxOptions - рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрди рдкреИрд░рд╛рдореАрдЯрд░ред

рд╣рдорд╛рд░реА рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП HTML рдорд╛рд░реНрдХрдЕрдк рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, TagBuilder рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
 var builder = new TagBuilder("img"); builder.MergeAttribute("src", String.Format("/Content/images/star-{0}.png", inFavourite ? "on" : "off")); builder.MergeAttribute("title", inFavourite ? "  " : "  "); 

рд▓рд┐рдВрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдорд╛рдирдХ Ajax.ActionLink рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
 var link = helper.ActionLink("[replaceme]", actionName, routeValues, ajaxOptions).ToHtmlString(); 

рдФрд░ рдлрд┐рд░ рд╣рдорд╛рд░реЗ HTML img рддрддреНрд╡ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдкрд╛рда рдХрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЬреЛрдбрд╝реЗрдВ:
 return new MvcHtmlString(link.Replace("[replaceme]", builder.ToString(TagRenderMode.SelfClosing))); 

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдорд╛рд░реА рдПрдХреНрд╕рдЯреЗрдВрд╢рдиреНрд╕.cs рдХреНрд▓рд╛рд╕ рдлреЙрд░реНрдо рд▓реЗрдЧреА:
  public static class Extensions { public static IHtmlString ImageActionLink(this AjaxHelper helper, string actionName, bool inFavourite, AjaxOptions ajaxOptions) { var builder = new TagBuilder("img"); builder.MergeAttribute("src", String.Format("/Content/images/star-{0}.png", inFavourite ? "on" : "off")); builder.MergeAttribute("title", inFavourite ? "  " : "  "); var link = helper.ActionLink("[replaceme]", actionName, inFavourite, ajaxOptions).ToHtmlString(); return new MvcHtmlString(link.Replace("[replaceme]", builder.ToString(TagRenderMode.SelfClosing))); } } 

рдпрджрд┐ рд╣рдо рдЕрдкрдиреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдердб рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ ( @ MVC3_AjaxActionImageLink.Core рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж), рдирд┐рдореНрди HTML рдорд╛рд░реНрдХрдЕрдк рдЬреЗрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
 <a data-ajax="true" data-ajax-mode="replace" data-ajax-update="#favourite" ref="/Home/AddOrRemoveFavourite"> <img src="/Content/images/star-on.png" title="  " /> </a> 

рдпрд╛
 <a data-ajax="true" data-ajax-mode="replace" data-ajax-update="#favourite" href="/Home/AddOrRemoveFavourite"> <img src="/Content/images/star-off.png" title="  " /> </a> 

рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ div, рд╕рд┐рддрд╛рд░реЛрдВ рдХреА рддрд╕реНрд╡реАрд░реЗрдВ, рджреЗрдЦрдиреЗ рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдФрд░ рдЦреБрдж AddOrRemoveFavourite рд╡рд┐рдзрд┐ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред

4. рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ AddOrRemoveFavourite рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рдирд╛


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдзрд┐ рдПрдХ рдорд╛рди рд▓реМрдЯрд╛рддреА рд╣реИ, рдпрд╣ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдПрдХ рд╕рдВрдЦреНрдпрд╛, JSON рдбреЗрдЯрд╛, рдЖрджрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдирдП рддрддреНрд╡ рдХреЗ HTML рдорд╛рд░реНрдХрдЕрдк рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рд╣рдорд╛рд░рд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд┐рдзрд┐ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдХрд╛рд╢ (рдпрд╛ рд╕реМрднрд╛рдЧреНрдп рд╕реЗ), ASP .NET MVC 3 рдореЗрдВ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб (рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдердб) рдореЗрдВ рд╣рдорд╛рд░реЗ рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ рдореЗрдердб рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдо рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдердб рдореЗрдВ рдХреЛрдб рдХреЛ рдХреЙрдкреА рдХрд┐рдП рдмрд┐рдирд╛ рдорд╛рд░реНрдХрдЕрдк рдирд╣реАрдВ рдмрдирд╛ рдкрд╛рдПрдВрдЧреЗ (рдЕрдиреНрдпрдерд╛, рдореМрд▓рд┐рдХ рдореЗрдВ рд╕реЗ рдПрдХ) MVC- DRY рд╕рд┐рджреНрдзрд╛рдВрдд)ред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХрдВрдЯреНрд░реЛрд▓рд░ рд╡рд┐рдзрд┐ рд╕реЗ, рд╣рдо рдЖрдВрд╢рд┐рдХ рджреГрд╢реНрдп рдкрд░ рдХреЙрд▓ рд▓реМрдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдорд╛рд░реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдкрджреНрдзрддрд┐ рдкрд░ рдХреЙрд▓ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ HTML рдорд╛рд░реНрдХрдЕрдк рд▓реМрдЯрд╛рдПрдЧрд╛ред

рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

4.1ред рдПрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдЖрдВрд╢рд┐рдХ рджреГрд╢реНрдп рдЬреЛрдбрд╝реЗрдВ


рдкрд╛рд░реНрд╢рд┐рдпрд▓ рдлреЛрд▓реНрдбрд░ рдХреЛ рд╡реНрдпреВ рдлреЛрд▓реНрдбрд░ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рдЖрдВрд╢рд┐рдХ рдореЗрдВ, рдкрд╕рдВрджреАрджрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдЬреЛрдбрд╝реЗрдВред
рдЖрдВрд╢рд┐рдХ рджреГрд╢реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдПрдБ рдХрд╛ рдЪрдпрди рдХрд░рдХреЗ рдкрд╕рдВрджреАрджрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рджреГрд╢реНрдп рдЬреЛрдбрд╝реЗрдВ рдФрд░ AddOrRemoveFavourites_PartinyView рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ

рдЫрд╡рд┐

рдЬреЛрдбрд╝реЗ рдЧрдП рдЖрдВрд╢рд┐рдХ рджреГрд╢реНрдп рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрджреЗрд╢ рдЬреЛрдбрд╝реЗрдВ:
 @using MVC3_AjaxActionImageLink.Core @Model bool 

рдФрд░ рд╣рдорд╛рд░реА рд╡рд┐рдзрд┐ рдХрд╛ рдЖрд╣реНрд╡рд╛рди рд╕реНрд╡рдпрдВ:
 @Ajax.ImageActionLink("AddOrRemoveFavourite", (bool)Model, new AjaxOptions() { UpdateTargetId = "favourite" }); 

рдиреЛрдЯред рд╡рд┐рд╡рд░рдг рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореЙрдбрд▓ рдкреНрд░рдХрд╛рд░ рдмреВрд▓ рдХрд╛ рдПрдХ рд╕реНрдерд┐рд░ рдЪрд░ рд╣реЛрдЧрд╛ред

Index.cshtml рдХреА рд╕рд╛рдордЧреНрд░реА рдЕрдм рд╡рд┐рд╕реНрддрд╛рд░ рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрджреЗрд╢ рджреЗрддреА рд╣реИ рдЖрдВрд╢рд┐рдХ рджреГрд╢реНрдп рдФрд░ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
 @using MVC3_AjaxActionImageLink.Core @model bool @{ ViewBag.Title = "Index"; Layout = "~/Views/Shared/_Layout.cshtml"; } <h2>Index</h2> <div id="favourite"> @{ Html.RenderPartial("/Views/Partial/Favourites/AddOrRemoveFavourites_PartialView.cshtml", Model); } </div> 


4.2ред рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ AddOrRemoveFavourite рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдореЙрдбрд▓ рд╕реЗ рдмрд╛рдВрдзреЗрдВ


рд╣рдорд╛рд░реЗ рдЖрдВрд╢рд┐рдХ рджреГрд╢реНрдп рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрде рдХреЛ рдкрд╛рд░ рдХрд░рдХреЗ, рдмрджрд▓реЗ рдореЗрдВ рдЖрдВрд╢рд┐рдХ рджреГрд╢реНрдп рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЪреВрдВрдХрд┐ рд╣рдо рд╕реНрдЯреЗрдЯрд┐рдХ рддрд░реАрдХреЗ рд╕реЗ рд╕реНрдЯреЗрдЯрд┐рдХ рдмреВрд▓ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЗрд╡ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдЕрдкрдиреЗ рджреЛрдиреЛрдВ рд╡реНрдпреВрдЬ рдХреЗ рдореЙрдбрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВрдЧреЗред рд╣рдорд╛рд░реЗ HomeController.cs рд╡рд░реНрдЧ рдХрд╛ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдиреАрдЪреЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
  public class HomeController : Controller { public static bool inFavourite = true; public ActionResult AddOrRemoveFavourite() { if (Request.IsAjaxRequest()) { inFavourite = !inFavourite; // TODO: Add or remove favourite return PartialView("/Views/Partial/Favourites/AddOrRemoveFavourites_PartialView.cshtml", inFavourite); } return View(); } public ActionResult Index() { // TODO: Check, if row is already in favourites return View(inFavourite); } } 


5. рдХреНрдпрд╛ рдмрдЪрд╛ рд╣реИ?


рдЕрдВрддрд┐рдо рдЪрд░рдг рдЫрд╡рд┐рдпрд╛рдБ рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рд╕реНрдЯрд╛рд░-рдСрдл.рдкреАрдПрдирдЬреА рдФрд░ рд╕реНрдЯрд╛рд░-рдСрди.рдкрдВрдЬ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛, рд╕рд╛рде рд╣реА рдПрдПрд╕рдкреА .NET рдПрдорд╡реАрд╕реА 3 рдореЗрдВ AJAX рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:
 <script src="../../Scripts/jquery.unobtrusive-ajax.min.js" type="text/javascript"></script> 

рд╣рдо рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред

рдЫрд╡рд┐

рд╣рдо рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ

рдЫрд╡рд┐

рдирд┐рд╖реНрдХрд░реНрд╖


рдЫрд╡рд┐

рддреЛ, рд╣рдордиреЗ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдФрд░ рдХреНрдпрд╛ рд╕реАрдЦрд╛:


рдЯрд┐рдкреНрдкрдгреА


рдПрдХ рдЫрд╡рд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдФрд░ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдирд╛рдо рд╕реНрдЯреАрдлрди рд╡рд╛рд▓реНрдЯреЗ рдХреА рд╕рдВрдкрд░реНрдХ рдЬрд╛рдЧреАрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

Source: https://habr.com/ru/post/In134126/


All Articles