asp.net mvc - কিভাবে এমভিসি একটি ডিফল্ট রুট(একটি এলাকায়) সেট করুন




asp.net-mvc asp.net-mvc-2 (9)

আচ্ছা, কাস্টম ভিউ ইঞ্জিন তৈরি করার সময় এটির জন্য কাজ করতে পারে, তবুও আপনার বিকল্প হতে পারে:

  • ডিফল্টরূপে আপনি কি প্রদর্শন করতে হবে তা নির্ধারণ করুন।
  • যে কিছু নিয়ামক এবং কর্ম (এবং এলাকা) আছে, অধিকার?
  • এরিয়া রেজিস্ট্রেশন খুলুন এবং এর মতো কিছু যোগ করুন:
public override void RegisterArea(AreaRegistrationContext context)
{
    //this makes it work for the empty url (just domain) to act as current Area.
    context.MapRoute(
        "Area_empty",
        "",
        new { controller = "Home", action = "Index", id = UrlParameter.Optional },
        namespaces: new string[] { "Area controller namespace" }
    );
        //other routes of the area
}

চিয়ার্স!

ঠিক আছে আগে এই জিজ্ঞাসা করা হয়েছে কিন্তু সেখানে কোন কঠিন সমাধান নেই। তাই এই দরকারী খুঁজে পেতে পারেন নিজেকে এবং অন্যদের উদ্দেশ্যে।

MVC2 এ (ASP.NET) আমি যখন এটিতে কোনও ওয়েবসাইট নেভিগেট করে তখন এটি চাই, একটি ডিফল্ট এলাকা নির্দিষ্ট করা আছে। তাই আমার সাইটে নেভিগেট আপনাকে AreaZ এ কন্ট্রোলারএক্স অ্যাকশনওয়াই পাঠাতে হবে।

Global.asax নিম্নলিখিত রুট ব্যবহার করে

routes.MapRoute(
                "Area",
                "",
                new { area = "AreaZ", controller = "ControllerX ", action = "ActionY " }
            );

এখন এটি সঠিক পৃষ্ঠাটি পরিবেশন করার চেষ্টা করে এমনভাবে কাজ করে। তবে এমভিসি সাইটটির রুটটিতে ভিউ সন্ধান করতে এগিয়ে আসে এবং এলাকা ফোল্ডারে নয়।

এই সমাধানের একটি উপায় আছে কি?

সম্পাদনা

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

         public ActionResult ActionY()
        {
            return View("~/Areas/AreaZ/views/ActionY.aspx");
        }

সম্পাদনা:

পৃষ্ঠাটির একটি HTML অ্যাকশনলিঙ্ক থাকা অবস্থায় এটিও একটি সমস্যা হয়ে দাঁড়ায়। যদি ক্ষেত্রটি সেট না করা হয় তবে অ্যাকশন লিঙ্কটি আউটপুট খালি।

এই নকশা বা একটি ত্রুটি দ্বারা সব?


আমার অ্যাপ্লিকেশন_স্টার্টে নিম্নলিখিতগুলি যোগ করা আমার জন্য কাজ করে, যদিও আমি নিশ্চিত নই যে আপনার কাছে RC এ এই সেটিং আছে কিনা:

var engine = (WebFormViewEngine)ViewEngines.Engines.First();

// These additions allow me to route default requests for "/" to the home area
engine.ViewLocationFormats = new string[] { 
    "~/Views/{1}/{0}.aspx",
    "~/Views/{1}/{0}.ascx",
    "~/Areas/{1}/Views/{1}/{0}.aspx", // new
    "~/Areas/{1}/Views/{1}/{0}.ascx", // new
    "~/Areas/{1}/Views/{0}.aspx", // new
    "~/Areas/{1}/Views/{0}.ascx", // new
    "~/Views/{1}/{0}.ascx",
    "~/Views/Shared/{0}.aspx",
    "~/Views/Shared/{0}.ascx"
};

আমি এই কাজ পেতে কি কি নিম্নলিখিত:

  1. আমি রুট / কন্ট্রোলার ফোল্ডার একটি ডিফল্ট নিয়ামক তৈরি। আমি আমার কন্ট্রোলার ডিফল্ট কন্ট্রোলার নাম।
  2. নিয়ামক আমি নিম্নলিখিত কোড যোগ করা হয়েছে:

    namespace MyNameSpace.Controllers {
    public class DefaultController : Controller {
        // GET: Default
        public ActionResult Index() {
            return RedirectToAction("Index", "ControllerName", new {area = "FolderName"});
        }
    } }
  3. আমার RouterConfig.cs আমি নিম্নলিখিত যোগ করেছেন:

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new {controller = "Default", action = "Index", id = UrlParameter.Optional});

এই সব পিছনে কৌশল হল আমি একটি ডিফল্ট কনস্ট্রাক্টর তৈরি করেছি যা সবসময় আমার অ্যাপ্লিকেশন শুরু হওয়ার সময় স্টার্টআপ নিয়ামক হবে। যখন এটি ডিফল্ট নিয়ামকটিকে হিট করে তখন এটি ডিফল্ট সূচী অ্যাকশনতে নির্দিষ্ট কোনও নিয়ামককে পুনঃনির্দেশিত করবে। আমার ক্ষেত্রে যা

www.myurl.com/FolderName/ControllerName


উম্ম, আমি জানিনা কেন এই সব প্রোগ্রামিং কেন, আমি মনে করি মূল সমস্যাটি সহজেই এই ডিফল্ট রুটটি নির্দিষ্ট করে সমাধান করা হচ্ছে ...

routes.MapRoute("Default", "{*id}", 
                 new { controller = "Home"
                     , action = "Index"
                     , id = UrlParameter.Optional 
                     }
              );

এই আমি এটা কিভাবে। আমি জানি না কেন MapRoute () আপনাকে এলাকাটি সেট করার অনুমতি দেয় না, তবে এটি রুট অবজেক্টটি ফেরত দেয় যাতে আপনি যে কোনও অতিরিক্ত পরিবর্তনগুলি চালিয়ে যেতে পারেন। আমি এটি ব্যবহার করি কারণ আমার কাছে একটি মডুলার এমভিসি সাইট রয়েছে যা এন্টারপ্রাইজ গ্রাহকদের কাছে বিক্রি করা হয় এবং নতুন মডিউল যুক্ত করতে ডিলগুলিকে ড্রিল করতে সক্ষম হতে হবে। আমি তাদের AppSettings কনফিগারেশন "HomeArea" পরিবর্তন করতে অনুমতি দেয়।

var route = routes.MapRoute(
                "Home_Default", 
                "", 
                new {controller = "Home", action = "index" },
                new[] { "IPC.Web.Core.Controllers" }
               );
route.DataTokens["area"] = area;

সম্পাদন করুন: আপনি আপনার এরিয়া রেজিস্ট্রেশন এও এটি ব্যবহার করতে পারেন। রেজিস্ট্রারআরিয়া সেই এলাকার জন্য যা আপনি ব্যবহারকারীকে ডিফল্টভাবে যেতে চান। আমি এটি পরীক্ষা করে নিচ্ছি কিন্তু AreaRegistrationContext.MapRoute রুট সেট করে। route.DataTokens["area"] = this.AreaName; তোমার জন্য.

context.MapRoute(
                    "Home_Default", 
                    "", 
                    new {controller = "Home", action = "index" },
                    new[] { "IPC.Web.Core.Controllers" }
                   );

এই প্রশ্নটির গ্রহণযোগ্য সমাধান, যখন কোনও কাস্টম ভিউ ইঞ্জিন তৈরি করতে সংক্ষেপে সঠিক হয়, তখন সঠিকভাবে প্রশ্নের উত্তর দেয় না। এখানে ইস্যু যে পিনো ভুলভাবে তার ডিফল্ট রুট নির্দিষ্ট করা হয় । বিশেষ করে তার "এলাকা" সংজ্ঞা ভুল। "এলাকা" ডেটাটোকেন্স সংগ্রহের মাধ্যমে চেক করা হয় এবং এটিকে যোগ করা উচিত:

var defaultRoute = new Route("",new RouteValueDictionary(){{"controller","Default"},{"action","Index"}},null/*constraints*/,new RouteValueDictionary(){{"area","Admin"}},new MvcRouteHandler());
defaultRoute.DataTokens.Add("Namespaces","MyProject.Web.Admin.Controller"); 
routes.Add(defaultRoute);

ডিফল্ট বস্তুর নির্দিষ্ট "এলাকা" উপেক্ষা করা হবে । উপরের কোডটি একটি ডিফল্ট রুট তৈরি করে, যা আপনার সাইটের রুটের জন্য অনুরোধে ক্যাচ দেয় এবং তারপরে ডিফল্ট নিয়ামককে কল করে, অ্যাডমিন এলাকায় ইনডেক্স ক্রিয়া। এছাড়াও ডেটা টোকেনগুলিতে "নামস্থান" কী যোগ করা হয়েছে তা দয়া করে নোট করুন, এটি শুধুমাত্র তখনই প্রয়োজন যদি আপনার একই নামের একাধিক কন্ট্রোলার থাকে। এই সমাধান MVC2 এবং MVC3 .NET 3.5 / 4.0 দিয়ে যাচাই করা হয়


প্রথম, আপনি কি এমভিসি 2 এর সংস্করণ ব্যবহার করছেন? Preview2 থেকে RC থেকে উল্লেখযোগ্য পরিবর্তন হয়েছে।

আপনি আরসি ব্যবহার করে অনুমান, আমি মনে করি আপনি রুট-ম্যাপিং ভিন্ন চেহারা উচিত। আপনার এলাকার AreaRegistration.cs এ, আপনি কোন ধরনের ডিফল্ট রুট নিবন্ধন করতে পারেন, যেমন

        context.MapRoute(
            "ShopArea_default",
            "{controller}/{action}/{id}",
            new { action = "Index", id = "", controller="MyRoute" }
        );

উপরের কোডটি ব্যবহারকারীকে MyRouteController এ ডিফল্ট প্রতি আমাদের ShopArea

একটি দ্বিতীয় পরামিতি হিসাবে একটি খালি স্ট্রিং ব্যবহার করে একটি ব্যতিক্রম নিক্ষেপ করা উচিত, কারণ একটি নিয়ামক নির্দিষ্ট করা আবশ্যক।

অবশ্যই আপনাকে Global.asax এ ডিফল্ট রুট পরিবর্তন করতে হবে যাতে এটি ডিফল্ট Global.asax হস্তক্ষেপ না করে, যেমন মূল সাইটের জন্য একটি উপসর্গ ব্যবহার করে।

এছাড়াও এই থ্রেড এবং হ্যাকের উত্তরটি দেখুন: MVC 2 এলাকা রেজিস্ট্রেশন রুট অর্ডার

আশাকরি এটা সাহায্য করবে.


বিভিন্ন বিল্ডিং ব্লক সনাক্তকরণ জীবন চক্র মধ্যে সম্পন্ন করা হয়। ASP.NET MVC অনুরোধের জীবনচক্রের প্রথম পদক্ষেপগুলির মধ্যে একটি হল যথাযথ নিয়ামক অ্যাকশন পদ্ধতিতে অনুরোধ করা URL টি ম্যাপ করা। এই প্রক্রিয়া রাউটিং হিসাবে উল্লেখ করা হয়। একটি ডিফল্ট রুট Global.asax ফাইলের মধ্যে শুরু হয় এবং ASP.NET MVC ফ্রেমওয়ার্ককে কীভাবে একটি অনুরোধ পরিচালনা করতে হয় তা বর্ণনা করে। MvcAplication1 প্রকল্পে Global.asax ফাইলে ডাবল ক্লিক করলে নিম্নলিখিত কোডটি প্রদর্শিত হবে:

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Routing;

namespace MvcApplication1 {

   public class GlobalApplication : System.Web.HttpApplication
   {
       public static void RegisterRoutes(RouteCollection routes)
       {
           routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

           routes.MapRoute(
               "Default",                                          // Route name
               "{controller}/{action}/{id}",                       // URL with parameters
               new { controller = "Home", action = "Index",
                     id = "" }  // Parameter defaults
           );

       }

       protected void Application_Start()
       {
           RegisterRoutes(RouteTable.Routes);
       }
   }

}

অ্যাপ্লিকেশন_স্টার্ট () ইভেন্ট হ্যান্ডলারে, যখনই অ্যাপ্লিকেশনটি কম্পাইল করা হয় বা ওয়েব সার্ভারটি পুনরায় চালু হয় তখন এটি বহিস্কার করা হয়, একটি রুট টেবিল নিবন্ধিত হয়। ডিফল্ট রুটটিকে ডিফল্ট নাম দেওয়া হয় এবং http://www.example.com/ {নিয়ামক} / {action} / {id} আকারে একটি URL এ প্রতিক্রিয়া জানায়। {এবং} এর মধ্যে ভেরিয়েবলগুলি অনুরোধ URL থেকে প্রকৃত মানগুলির সাথে বা ইউআরএলে কোন ওভাররাইড উপস্থিত থাকলে ডিফল্ট মানগুলির সাথে জনবহুল। ডিফল্ট রুটিং প্যারামিটার অনুযায়ী, এই ডিফল্ট রুটটি হোম কন্ট্রোলার এবং সূচীর অ্যাকশন পদ্ধতিতে মানচিত্রে থাকবে। আমরা এই রাউটিং মানচিত্র সঙ্গে অন্য কোন পদক্ষেপ হবে না।

ডিফল্টরূপে, সমস্ত সম্ভাব্য URL গুলি এই ডিফল্ট রুট দিয়ে ম্যাপ করা যেতে পারে। এটা আমাদের নিজস্ব রুট তৈরি করা সম্ভব। উদাহরণস্বরূপ, ইউআরএল http://www.example.com/Employee/Maarten নিয়োগকর্তা নিয়ামক, শো দেখান, এবং firstname পরামিতি URL এর ম্যাপ। নিচের কোডটি স্নিপেটটি সন্নিবেশ করা যেতে পারে গ্লোবাল.আস্যাক্স ফাইলটিতে যা আমরা খোলামেলা করেছি। কারণ ASP.NET MVC ফ্রেমওয়ার্কটি প্রথম মেলা রুট ব্যবহার করে, ডিফল্ট রুটের উপরে এই কোড স্নিপেটটি ঢোকানো উচিত; অন্যথায় রুট ব্যবহার করা হবে না।

routes.MapRoute(

   "EmployeeShow",                    // Route name
   "Employee/{firstname}",            // URL with parameters
    new {                             // Parameter defaults
       controller = "Employee",
       action = "Show", 
       firstname = "" 
   }  

);

এখন, এই রুট জন্য প্রয়োজনীয় উপাদান যোগ করুন। সর্বোপরি, কন্ট্রোলার ফোল্ডারে EmployeeController নামে একটি ক্লাস তৈরি করুন। আপনি প্রকল্পটিতে একটি নতুন আইটেম যোগ করে এবং ওয়েবের নীচে অবস্থিত এমভিসি কন্ট্রোলার ক্লাস টেম্পলেটটি নির্বাচন করে এটি করতে পারেন এমভিসি বিভাগ। সূচী অ্যাকশন পদ্ধতিটি সরান এবং এটি একটি নাম বা কর্ম নাম সহ কর্ম প্রতিস্থাপন করুন। এই পদ্ধতি একটি firstname পরামিতি গ্রহণ করে এবং ViewData অভিধানে ডেটা পাস করে। এই অভিধানটি ডেটা প্রদর্শনের জন্য ব্যবহার করে ব্যবহার করা হবে।

কর্মচারী কন্ট্রোলার বর্গ দেখুন একটি কর্মচারী বস্তুর পাস হবে। এই কর্মচারী শ্রেণীটি মডেল ফোল্ডারে যুক্ত করা উচিত (এই ফোল্ডারটিতে ডান ক্লিক করুন এবং প্রসঙ্গ মেনু থেকে Add | Class নির্বাচন করুন)। কর্মচারী শ্রেণীর জন্য কোড এখানে দেওয়া হল:

namespace MvcApplication1.Models {

   public class Employee
   {
       public string FirstName { get; set; }
       public string LastName { get; set; }
       public string Email { get; set; }
   }

} 

routes.MapRoute(
                "Area",
                "{area}/",
                new { area = "AreaZ", controller = "ControlerX ", action = "ActionY " }
            );

আপনি যে চেষ্টা করেছেন?





asp.net-mvc-2