Namespace ControllersAndActions.Controllers. public class DerivedController : Controller



{

public class DerivedController : Controller

{

   public ActionResult Index()

   {

       // ...

   }

 

   public void ProduceOutput()

   {

       if (Server.MachineName == "ProfessorWeb")

           Response.Redirect("/Basic/Index");

       else

           Response.Write("Контроллер: Derived, Метод действия: ProduceOutput");

   } } }

Пайдаланушыға жауап берудің осы тәсілі жұмыс істесе де, онымен байланысты бірнеше мәселелер бар:

Контроллер кластары HTML құрылымы немесе URL мекенжайы туралы ақпаратты қамтуы тиіс, бұл сыныптарды оқып, қолдауға қиындық тудырады.

Шығаруға тікелей жауап беретін контроллер модульдік тестке қиын. Сіз Response нысанын имитациялық іске асыруды жасауыңыз керек, содан кейін контроллерден шыққан деректерді анықтау үшін оны басқара аласыз. Бұл, мысалы, ұзақ мерзімді және едәуір процесс болып табылатын түйінді сөздерге HTML түзетулерін талдауды енгізу қажеттілігін білдіреді.

Для чего используются результаты действия в MVC Framework?

Пайдаланушы ресурсқа кіргенде, әдетте, ол белгілі бір жауапты алуды күтеді, мысалы, кейбір деректер бар веб-бет ретінде. Сервер жағында контроллердің әдісі, қабылдау параметрлері, оларды өңдейді және әрекеттің нәтижесі ретінде кейбір жауаптар жасайды.
Әдетте, қайтарылған нәтиже ActionResult-ден алынған сыныптың нысаны болып табылады. ActionResult - мұрагерлік сыныптарда қайта анықталған бір ExecuteResult әдісі анықталған дерексіз класс:

public abstract class ActionResult

{

public abstract void ExecuteResult(ControllerContext context);

}

Біз өзіміздің әрекеттер нәтижелерін жасаймыз. Олар өте қарапайым болады. Папка қосқаннан кейін бірінші классты қосамыз. Оны HtmlResult деп атайық. Ол келесі кодты қамтиды:

using System.Web.Mvc;

namespace BookStore.Util

{

public class HtmlResult : ActionResult

{

private string htmlCode;

public HtmlResult(string html)

{

htmlCode = html;

}

public override void ExecuteResult(ControllerContext context)

{

string fullHtmlCode = "<!DOCTYPE html><html><head>";

fullHtmlCode += "<title>Главная страница</title>";

fullHtmlCode += "<meta charset=utf-8 />";

fullHtmlCode += "</head> <body>";

fullHtmlCode += htmlCode;

fullHtmlCode += "</body></html>";

context.HttpContext.Response.Write(fullHtmlCode);

}

HtmlResult класының конструкторында біз html кодын жібереміз, және Execute әдісінде оны толық html бетін алу үшін жалпы ортаға саламыз және оны ағымдық ағынға жазамыз: context.HttpContext.Response.Write (fullHtmlCode);
Бұл класты пайдалану үшін контроллерге жаңа класстың аттар кеңістігін қосамыз: BookStore.Util арқылы; жаңа әдіс қосамыз

public ActionResult GetHtml()

{

return new HtmlResult("<h2>Привет мир!</h2>");

}

Және осы әдіске браузерден кіру арқылы, мысалы, Home / GetHtml, біз html-бетті аламыз. Бұл мысал тұтастай алғанда әрекет нәтижесі класстарының қалай жұмыс істейтінін көрсетеді.

Как происходит передача данных из метода действия в представление?

Деректерді көрініске берудің 3 тәсілі бар ViewDataDictionary және ViewBag қолдану арқылы, сонымен қатар терілген көріністі қарастыру арқылы.

ViewDataDiction Көрініс үлгісі туралы ақпаратты беру үшін пайдаланылатын негізгі құрал - ViewDataDictionary. Басқа MVC шеңберлерімен қатар, ASP.NET MVC сөздіктерді контроллерге кез-келген ақпаратты және модельдік нысандарды қарауға беру мүмкіндігімен қамтамасыз етеді. Сөздік нысанының көмегімен біз оны тиісті түрде көрсету үшін мүмкіндігінше көп нысандарды көрініске жібере аламыз.

Мысалы, кез келген пайдаланушы қонақ кітабын "Guestbook" көре алатындай етіп, Қонақ кітабын қалай кеңейте алатынымызды қарастырайық, бірақ тек тіркелген пайдаланушылар ғана осы кітаптың жазбаларын өңдей алады. Экрандағы қонақ кітабы туралы толық ақпаратты көрсету үшін GuestbookEntry нысанын төменде көрсетілгендей тікелей көріністе тасымалдауға болады:

public class GuestbookEntry{ public int Id { get; set; } public string Name { get; set; } public string Message { get; set; } public DateTime DateAdded { get; set; }}

GuestbookEntry класы GuestbookEntry көрсету үшін қажетті барлық ақпаратты қамтиды, бірақ ол қазіргі кезде тіркелген пайдаланушылар туралы ақпаратты қамтымайды және гиперсілтеме түзетуін көріністе көрсету керек пе екенін анықтамайды. Бұл шешімді қабылдау үшін, GuestbookEntry түрінің нысанына өтуге қарағанда, бұл туралы көбірек ақпарат беру қажет. Мұндай ақпаратты ұсыну үшін біз ViewDataDictionary төменде көрсетілгендей пайдалана аламыз:

public ViewResult Show(int id){ var entry = _db.Entries.Find(id); bool hasPermission = User.Identity.Name == entry.Name; ViewData["hasPermission"] = hasPermission; return View(entry);}

Бақылаушы базасының сыныбында ViewDataDictionary нысанына қол жеткізе аламыз, ол ViewData сипатын пайдаланып, көрініске беріледі. Біз ағымдағы пайдаланушының атын тексеріп, оны Name сипатында көрсетілген қонақ кітабы жазбасымен салыстырамыз және салыстыру нәтижесін ViewData бағдарламасына hasPermission кілтімен қойыңыз. Содан кейін ViewResult нысанын жасау және біздің GuestbookEntry нысанын Model ViewData сипатының мәні ретінде орнату үшін қосалқы көру әдісін пайдаланамыз.

Using System.Web.Mvc;

Namespace ControllersAndActions.Controllers

{

Public class ExampleController:Controller

{

Public ViewResultIndex()

{return View(“Homepge”);

}

}
}

Нәтижелерінің жүйесі пайдаланылғанда, MVC Framework бейнелеу керек көрінісі ViewResult класының данасын пайдалану арқылы көрсетіледі. Мұны істеудің қарапайым жолы - контроллердің View () әдісіне дәлел ретінде ұсынуды беру. Мысалда View () әдісі HomePage.cshtml көрінісін пайдалану қажеттігін көрсететін «Homepage» дәлелімен шақырылады.

Мысалыда әрекет әдісінің қайтару түрі ViewResult болып табылады. Әдіс ActionResult-тың неғұрлым жалпы түрін көрсететін болса да, оны жинайды және жұмыс істейді. Шындығында, кейбір MVC бағдарламашылары əрекет əдісінің əрекетін ActionResult ретінде анықтайды, тіпті əдіс белгілі бір түрді қайтаратыны белгілі болса да.

VC Framework, ViewResult нысанының ExecuteResult () әдісін шақырғанда, көрсетілген көріністі іздеу басталады


Дата добавления: 2018-02-15; просмотров: 526; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!