ভিউআরসাল্ট () এবং অ্যাকশন রেজাল্ট () এর মধ্যে পার্থক্য


294

এএসপি.নেট এমভিসির মধ্যে ViewResult()এবং এর ActionResult()মধ্যে পার্থক্য কী ?

public ViewResult Index()
{
    return View();
}

public ActionResult Index()
{
    return View();
}

11
দুর্দান্ত প্রশ্ন। আমি একটি ভিডিও দেখেছি এবং ইউনিট পরীক্ষা তৈরি করতে প্রশিক্ষক প্রথমে তিনি যে অ্যাকশনটি পরীক্ষা করতে যাচ্ছেন তার অ্যাকশনের রিটার্নের ধরণটি অ্যাকশনারসাল্ট থেকে ভিউরসাল্টে পরিবর্তন করেছে। কোনও ব্যাখ্যা নেই .... আমি "আমরা কীভাবে এলোমেলোভাবে প্রকারগুলি পরিবর্তন করতে পারি? কোন ব্যাখ্যা ছাড়াই" এর মতো ছিলাম
ডগ চেম্বারলাইন

3
সম্ভবত এই ডকুমেন্টেশন সহায়ক: :) এমএসডিএন.ইমক্রিফ্টস
en

উত্তর:


372

অ্যাকশনারসাল্ট একটি বিমূর্ত শ্রেণি যা বেশ কয়েকটি উপ টাইপ থাকতে পারে।

অ্যাকশনারসাল্ট সাব টাইপস

  • ভিউআরসাল্ট - প্রতিক্রিয়া প্রবাহে একটি নির্দিষ্ট ভিউ রেন্ডার করে

  • আংশিকভিউ ফলাফল - প্রতিক্রিয়া প্রবাহে একটি নির্দিষ্ট আংশিক দৃশ্য সরবরাহ করে R

  • EmptyResult - একটি খালি প্রতিক্রিয়া ফিরে আসে

  • RedirectResult - নির্দিষ্ট URL এ একটি HTTP পুনর্নির্দেশ সঞ্চালন করে

  • RedirectToRouteResult - প্রদত্ত রুটের ডেটার উপর ভিত্তি করে রাউটিং ইঞ্জিন দ্বারা নির্ধারিত কোনও URL- তে একটি HTTP পুনর্নির্দেশ সম্পাদন করে

  • জসনআরসাল্ট - প্রদত্ত ভিউডাটা অবজেক্টটিকে জেএসএন ফর্ম্যাটে সিরিয়াল করে

  • জাভাস্ক্রিপ্টআরসাল্ট - জাভাস্ক্রিপ্ট কোডের এক টুকরোটি প্রদান করে যা ক্লায়েন্টের উপর কার্যকর করা যেতে পারে

  • ContentResult - কোনও দর্শন প্রয়োজন না করে প্রতিক্রিয়া স্ট্রিমে লিখিত সামগ্রী

  • ফাইলকন্টেন্টরিসাল্ট - ক্লায়েন্টকে একটি ফাইল ফেরত দেয়

  • ফাইলস্ট্রিমআরসাল্ট - ক্লায়েন্টকে একটি ফাইল ফেরত দেয়, যা একটি স্ট্রিম সরবরাহ করে

  • ফাইলপথরেসল্ট - ক্লায়েন্টকে একটি ফাইল ফেরত দেয়

সম্পদ


5
অ্যাকশনারসাল্টের চেয়ে ভিউরসাল্ট ফিরে আসার সুবিধা কী - এটি কি আরও খানিকটা শব্দার্থক এবং আপনার অভিপ্রায় দেখায় - তবে বাস্তবে সাধারণত কোনও তফাত হয় না?
নিকো

120

অ্যাকশনারসাল্ট একটি বিমূর্ত শ্রেণি।

ViewResult থেকে আহরিত ActionResult । অন্যান্য উত্পন্ন ক্লাসগুলির মধ্যে জসনআরসাল্ট এবং আংশিকভিউ রেজাল্ট অন্তর্ভুক্ত রয়েছে ।

আপনি এটি এ জাতীয়ভাবে ঘোষণা করুন যাতে আপনি পলিমারফিজমের সুবিধা নিতে পারেন এবং একই পদ্ধতিতে বিভিন্ন ধরণের ফিরিয়ে আনতে পারেন।

উদাহরণ:

public ActionResult Foo()
{
   if (someCondition)
     return View(); // returns ViewResult
   else
     return Json(); // returns JsonResult
}

2
এর অর্থ কি এই যে আমাদের সর্বদা অ্যাকশনারসাল্ট ফিরিয়ে দেওয়া উচিত যাতে আমরা এর সুবিধা পেতে পারি। নাকি এর কোনও সীমাবদ্ধতা বা পার্শ্ব প্রতিক্রিয়া রয়েছে?
আদর্শ কুমার

5
@ আদর্শ - সি # তে যে কোনও বিমূর্ত ক্লাসের সাথে এটি একই। আপনি যদি পদ্ধতির অভ্যন্তরীণ বাস্তবায়নটি encapsulate করতে চান বা অন্যান্য উত্পন্ন টাইপের জন্য আপনার এপিআইয়ের ভবিষ্যতের প্রুফ চাইতে চান তবে সেভাবে এটি ঘোষণা করুন। যদি তা না হয় তবে কংক্রিটটি ব্যবহার করুন। আমি সাধারণত কংক্রিট ব্যবহার করি (যেমন ভিউরেসাল্ট বা জসনরসাল্ট)
RPM1984

31

এটি একই কারণে আপনি প্রতিটি বস্তুর "অবজেক্ট" ফেরত পাঠানোর পদ্ধতিটি লেখেন না। আপনার যতটা সম্ভব সুনির্দিষ্ট হওয়া উচিত। আপনি ইউনিট পরীক্ষা লেখার পরিকল্পনা করছেন তবে এটি বিশেষভাবে মূল্যবান। রিটার্নের ধরণের এবং / অথবা ফলাফল castালাইয়ের আর পরীক্ষা করা হয় না।


ক্লিনার কোড এবং ইউনিট টেস্টিং আমার অভিজ্ঞতার ভিত্তিতে ভিউরসাল্ট ব্যবহারের সুবিধা।
JoshYates1980

20

ভিউআরসাল্ট অ্যাকশনারসাল্টের একটি সাবক্লাস। ভিউ পদ্ধতিটি একটি ভিউরসাল্ট দেয়। সুতরাং সত্যিই এই দুটি কোড স্নিপেটগুলি ঠিক একই জিনিস করে। পার্থক্যটি হ'ল অ্যাকশন রেজাল্টের সাথে, আপনার নিয়ামক কোনও ভিউ ফেরত দেওয়ার প্রতিশ্রুতি দিচ্ছেন না - আপনি পদ্ধতিটির সংজ্ঞা পরিবর্তন না করে শর্তসাপেক্ষে কোনও পদ্ধতিতে একটি রেডাইরেক্টরসাল্ট বা অন্য কিছু ফিরিয়ে দিতে পারবেন method


11

অন্য উত্তরগুলি পার্থক্যগুলি সঠিকভাবে উল্লেখ করেছে, তবে মনে রাখবেন যে আপনি যদি কেবলমাত্র ভিউরসাল্ট ফিরিয়ে দেন তবে বেস অ্যাকশনারসাল্ট টাইপের পরিবর্তে আরও সুনির্দিষ্ট প্রকারটি ফিরিয়ে দেওয়া ভাল। এই নীতিটির একটি সুস্পষ্ট ব্যতিক্রম হ'ল যখন আপনার পদ্ধতিটি একশনআরসাল্ট থেকে প্রাপ্ত একাধিক প্রকার ফেরত দেয়।

এই নীতির পেছনের কারণগুলির সম্পূর্ণ আলোচনার জন্য দয়া করে এখানে সম্পর্কিত আলোচনাটি দেখুন: অবশ্যই এএসপি.নেট এমভিসি নিয়ন্ত্রক পদ্ধতিগুলি রিটার্ন অ্যাকশন রেজাল্ট?


4

কন্ট্রোলারে, কেউ নীচের বাক্য গঠন ব্যবহার করতে পারে

public ViewResult EditEmployee() {
    return View();
}

public ActionResult EditEmployee() {
    return View();
}

উপরের উদাহরণে কেবলমাত্র রিটার্নের ধরণ পরিবর্তিত হয়। একজন ফেরত ViewResultদেয় অন্য জন ফিরে আসে ActionResult

অ্যাকশনারসাল্ট একটি বিমূর্ত শ্রেণি। এটি গ্রহণ করতে পারে:

ভিউআরসাল্ট, আংশিকভিউ রিসাল্ট, এমপিআরসাল্ট, রিডাইরেক্টআরসাল্ট, রিডাইরেক্টটোরআউরলেট, জসনরেসাল্ট, জাভাস্ক্রিপ্টআরসাল্ট, কনটেন্ট রিসাল্ট, ফাইলকন্টেন্টেসেসল্ট, ফাইলস্ট্রিম রিসাল্ট, ফাইলপ্যাথরেসাল্ট ইত্যাদি

ViewResultএকটি উপশ্রেণী হয় ActionResult


4
আমি নিশ্চিত না যে এটি আপনি যা বোঝাতে চেয়েছিলেন সেটাই ছিল কিনা তবে কেবল আমি যদি এটি স্পষ্ট করতে চাই যে আপনার নাম এবং (কোনও) পরামিতি একইরকম একই সাথে আপনার দুটি দুটি পদ্ধতি থাকতে পারে না। শুধুমাত্র ফলাফলের ধরণ পরিবর্তন করে কোনও পদ্ধতি ওভারলোড করা সম্ভব নয়।
অ্যান্ড্রু

0

কন্ট্রোলারে আমি অ্যাকশনারসাল্ট সহ নীচের কোডটি নির্দিষ্ট করেছিলাম যা বেসভি ক্লাসে এমভিসিতে 11 টি সাব টাইপ থাকতে পারে যেমন: ভিউরসাল্ট, আংশিকভিউ রিসাল্ট, এমপিআরসাল্ট, রিডাইরেক্টসেল্ট, রিডাইরেক্টটোরউউটরেসলেট, জসনরসাল্ট, জাভাস্ক্রিপ্ট রিসাল্ট, ফাইলপ্রেসট্রেশন, ফাইলপ্রেসস্টল্ট File

    public ActionResult Index()
                {
                    if (HttpContext.Session["LoggedInUser"] == null)
                    {
                        return RedirectToAction("Login", "Home");
                    }

                    else
                    {
                        return View(); // returns ViewResult
                    }

                }
//More Examples

    [HttpPost]
    public ActionResult Index(string Name)
    {
     ViewBag.Message = "Hello";
     return Redirect("Account/Login"); //returns RedirectResult
    }

    [HttpPost]
    public ActionResult Index(string Name)
    {
    return RedirectToRoute("RouteName"); // returns RedirectToRouteResult
    }

তেমনিভাবে আমরা প্রতিটি 11 টি সাব-টাইপ স্পষ্ট করে নির্দিষ্ট করে না দিয়ে অ্যাকশনআরসাল্ট () ব্যবহার করে এই 11 টি সাব টাইপগুলি ফিরতে পারি। আপনি যদি বিভিন্ন ধরণের মতামত ফিরিয়ে দিচ্ছেন তবে অ্যাকশনারসাল্ট সেরা জিনিস best


0

আপনাকে কিছুটা সময় বাঁচাতে https://forums.asp.net/t/1448398.aspx এ আগের উত্তরটির একটি লিঙ্ক থেকে উত্তর

অ্যাকশনারসাল্ট একটি বিমূর্ত শ্রেণি, এবং এটি ভিউরসাল্ট শ্রেণির জন্য বেস শ্রেণি।

এমভিসি ফ্রেমওয়ার্কে, এটি আপনার ক্রিয়া পদ্ধতিটি প্রত্যাবর্তন করে এমন বস্তুকে রেফারেন্স করতে অ্যাকশনারসাল্ট শ্রেণি ব্যবহার করে। এবং এটিতে এক্সিকিউটর রেজাল্ট পদ্ধতিটি আহ্বান করে।

এবং ভিউআরসাল্ট এই বিমূর্ত শ্রেণীর জন্য একটি বাস্তবায়ন। এটি প্রদত্ত ভিউ নামের কিছু পূর্বনির্ধারিত পাথ (/ ভিউ / নিয়ন্ত্রক নাম /, / ভিউ / ভাগ / / ইত্যাদি) একটি দর্শন পৃষ্ঠা (সাধারণত এসপেক্স পৃষ্ঠা) সন্ধান করার চেষ্টা করবে।

আপনার পদ্ধতিটি আরও নির্দিষ্ট শ্রেণিতে ফিরে আসার জন্য সাধারণত একটি ভাল অনুশীলন। সুতরাং আপনি যদি নিশ্চিত হন যে আপনার অ্যাকশন পদ্ধতিটি কিছু দর্শন পৃষ্ঠা প্রত্যাবর্তন করবে তবে আপনি ভিউরসাল্ট ব্যবহার করতে পারেন। তবে যদি আপনার অ্যাকশন পদ্ধতির আলাদা আচরণ থাকতে পারে, যেমন হয় কোনও ভিউ রেন্ডার করুন বা পুনঃনির্দেশ সম্পাদন করুন। আপনি রিটার্নের ধরণ হিসাবে আরও সাধারণ বেস শ্রেণি অ্যাকশনারসাল্ট ব্যবহার করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.