मेरी परियोजना में मैं नियंत्रक से अपने विचार में एक से अधिक पैरामीटर (आईडी और विवरण) पास करना चाहता हूं।

यह मेरी परियोजना की संरचना है:

ProductController:

public IActionResult DettaglioDescrizione(int id, string descrizione)
{
    ViewData["ProductId"] = id;
    ViewData["ProductDescription"] = descrizione;
    return View("Details");
}

Details.cshtml व्यू:

<div class="text-center">
    <h1 class="display-4">Prodotti</h1>
    <p>Id prodotto: @ViewData["ProductId"]</p>
    <p>Descrizione prodotto: @ViewData["ProductDescription"]</p>
</div>

मुझे पता है कि मुझे Startup.cs में अपना पैटर्न संशोधित करना होगा। अगर मैं इस तरह से संशोधित करता हूं तो यह ठीक से काम करता है:

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

मेरा प्रश्न है: प्रत्येक पैरामीटर के लिए "/" जोड़े बिना ऐसा करने का एक बेहतर तरीका है?

1
Antonio Argentieri 15 सितंबर 2021, 12:20
आप [FromQuery] पैरामीटर के साथ क्वेरी पैरामीटर का उपयोग कर सकते हैं। इस दृष्टिकोण के साथ आपको अपनी रूटिंग परिभाषा बदलने की आवश्यकता नहीं है। लेकिन आप जो करना चाहते हैं उसके बारे में सोचना बेहतर है। आप अपना विचार भरने के लिए पैरामीटर का उपयोग क्यों करना चाहते हैं?
 – 
Dawid Wekwejt
15 सितंबर 2021, 12:31
क्या आप नियंत्रक क्रिया विधि या दृश्य में एकाधिक पैरामीटर पास करना चाहते हैं?
 – 
Marco
15 सितंबर 2021, 12:34
मैं नियंत्रक से अपने विचार में अधिक पैरामीटर पास करना चाहता हूं।
 – 
Antonio Argentieri
15 सितंबर 2021, 12:35
1
मैं एएसपी नेट कोर में नया हूं, यह सिर्फ एक अभ्यास है।
 – 
Antonio Argentieri
15 सितंबर 2021, 12:35
1
ऐसा लगता है कि आप यहां 2 प्रश्न पूछ रहे हैं। एक यह है कि बिना कस्टम मार्ग जोड़े DettaglioDescrizione में एकाधिक पैरामीटर कैसे प्राप्त करें और दूसरा यह है: उन्हें दृश्य में कैसे पास किया जाए।
 – 
Marco
15 सितंबर 2021, 12:36

3 जवाब

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

यदि आप कंट्रोलर से एक्शन या एक्शन से कंट्रोलर तक कई पैरामीटर पास करना चाहते हैं। आप एक मॉडल बनाने की कोशिश कर सकते हैं। एक्शन एक फॉर्म के साथ कंट्रोलर को डेटा पास कर सकता है। एक्शन एक मॉडल को देखने के लिए देता है। ताकि आपको इसकी आवश्यकता न हो मार्ग या ViewData के साथ एक से अधिक पैरामीटर पास करें। यहां एक डेमो है:

आदर्श:

public class Product
    {
        public int ProductId { get; set; }
        public string descrizione { get; set; }

    }

कार्य:

public IActionResult DettaglioDescrizione(Product product)
{
    return View("Details",product);
}

विवरण देखें:

@model Product
<div class="text-center">
    <h1 class="display-4">Prodotti</h1>
    <p>Id prodotto: @Model.ProductId</p>
    <p>Descrizione prodotto: @Model.ProductDescription</p>
</div>

राय:

@model Product
<form method="post" asp-action="DettaglioDescrizione">
    <div class="form-group">
        <label asp-for="ProductId" class="control-label"></label>
        <input asp-for="ProductId" class="form-control" />
    </div>
    <div class="form-group">
        <label asp-for="ProductDescription" class="control-label"></label>
        <input asp-for="ProductDescription" class="form-control" />
    </div>
    <input type="submit" value="submit" />
</form>

नतीजा: यहां छवि विवरण दर्ज करें

1
Yiyi You 16 सितंबर 2021, 06:08
बहुत - बहुत धन्यवाद! :)
 – 
Antonio Argentieri
23 सितंबर 2021, 13:04
अगर मेरा उत्तर मददगार है, तो क्या आप इसे उत्तर के रूप में स्वीकार कर सकते हैं?धन्यवाद।
 – 
Yiyi You
24 सितंबर 2021, 04:27

मॉडल बाइंडिंग में तीन बाध्यकारी स्रोत हैं

  1. फॉर्म मान
  2. मार्ग मान
  3. क्वेरी स्ट्रिंग

आप अभी जो कर रहे हैं वह रूट वैल्यू से है, हो सकता है कि आप क्वेरी स्ट्रिंग /1?description=value का उपयोग कर सकें या हो सकता है कि आप httppost कर सकें और फॉर्म से वैल्यू प्राप्त कर सकें।

2
ChizT 15 सितंबर 2021, 12:34
मैं एएसपी नेट कोर में नया हूं, मुझे फॉर्म वैल्यू और क्वेरी स्ट्रिंग नहीं पता है, लेकिन मैं आपके जवाब को अपने दिमाग में रखता हूं और मैं अपने कोड को ठीक से संशोधित करूंगा, शायद httppost का उपयोग करके
 – 
Antonio Argentieri
15 सितंबर 2021, 12:38
1
मेरे उपरोक्त उदाहरण पर एक नज़र डालें। यह आपके प्रश्न का पूर्ण समाधान होना चाहिए। इसके साथ स्वतंत्र महसूस करें और पूछें कि क्या आपके पास और प्रश्न हैं।
 – 
Dawid Wekwejt
15 सितंबर 2021, 13:02

यदि आप अपना मार्ग डीफ़ बदलना नहीं चाहते हैं। क्वेरी स्ट्रिंग पैरामीटर का उपयोग करें। यदि आप चाहते हैं कि आपकी क्रिया विधि में कई पैरामीटर न हों तो [FromQuery] एनोटेशन के साथ एक कस्टम क्लास का उपयोग करें:

public class ProductController : Controller
{
    public IActionResult DettaglioDescrizione([FromRoute] id, [FromQuery] MyClassDto param)
    {
        ViewData["ProductId"] = id;
        ViewData["ProductDescription"] = descrizione;
        
        return View("Details");
    }
}

public class MyClassDto
{
    public int Description { get; set; }
}

मार्ग डीईएफ़।

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

उपयोग:

https://localhost/Product/DettaglioDescrizione/7?Description=Hello
-1
Dawid Wekwejt 15 सितंबर 2021, 12:57