मैं एक क्रिया के लिए एक स्ट्रिंग पैरामीटर पास करना चाहता हूं। निम्नलिखित हस्ताक्षर के साथ HomeController में एक विधि बनाई:

[HttpGet]
public IActionResult TestView([FromQuery] string test)
{
    return View(test);
}

यह मेरा विन्यास वर्ग है:

    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllersWithViews();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }
            app.UseHttpsRedirection();
            app.UseStaticFiles();

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
            });
        }
    }

जब मैं https://localhost:5001/Home/TestView पर जाता हूं तो यह ठीक काम करता है जब मैं एक क्वेरी स्ट्रिंग जोड़ता हूं तो यह दृश्य खोजने में विफल रहता है। यह अजीब रास्तों का उपयोग करके दृश्य का पता लगाने की कोशिश करता है।

    InvalidOperationException: The view 'myvalue' was not found. The following locations were searched:
    /Views/Home/myvalue.cshtml
    /Views/Shared/myvalue.cshtml

क्या यह एक बग है?

0
Sergеу Isupov 25 जिंदा 2021, 15:23
Startup.cs में आपके मिडलवेयर क्या हैं?
 – 
Jacek
25 जिंदा 2021, 15:30
मैंने संपूर्ण Startup.cs पोस्ट किया। हालांकि, मैंने इसे छुआ नहीं है। यह डिफ़ॉल्ट एमवीसी मंदिर से है
 – 
Sergеу Isupov
25 जिंदा 2021, 15:35

1 उत्तर

सबसे बढ़िया उत्तर

व्यवहार हो रहा है क्योंकि आपने "myvalue" मान को अपने लौटाए गए ViewResult के पहले पैरामीटर के रूप में पारित किया है, जो कि व्यूनाम पैरामीटर है:

https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.viewresult.viewname?view=aspnetcore-5.0

यदि आप अपना रिटर्न स्टेटमेंट इसमें बदलते हैं:

return View();

तब आप एक दृश्य नाम पैरामीटर पास नहीं करेंगे और फिर यह TestView नामक दृश्य की खोज करेगा।

2
tnk479 25 जिंदा 2021, 15:46
कोई चिंता नहीं भाई। यदि आप ब्राउज़र में "myvalue" देखने की उम्मीद कर रहे थे, तो अपने रिटर्न प्रकार को स्ट्रिंग में बदलें और फिर पूरी तरह से विचारों को छोड़कर परीक्षण वापस कर सकते हैं। या आप इसके बजाय मूल्य को देखने के लिए बाध्य कर सकते हैं। बस निर्भर करता है कि आप क्या करना चाहते हैं।
 – 
tnk479
25 जिंदा 2021, 15:55
पहला तर्क दृश्य नाम है, यदि आप दृश्य में कुछ पास करना चाहते हैं, तो इसे दूसरे तर्क में पास करें। तो आपके मामले में, आप View("TestView", test) लिख सकते हैं - दृश्य मॉडल तब string प्रकार का होता है जिसे सही ढंग से उपयोग करने के लिए दृश्य से अवगत होना चाहिए।
 – 
King King
25 जिंदा 2021, 18:39