मेरी परियोजना में मैं नियंत्रक से अपने विचार में एक से अधिक पैरामीटर (आईडी और विवरण) पास करना चाहता हूं।
यह मेरी परियोजना की संरचना है:
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?}");
});
मेरा प्रश्न है: प्रत्येक पैरामीटर के लिए "/" जोड़े बिना ऐसा करने का एक बेहतर तरीका है?
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?description=value का उपयोग कर सकें या हो सकता है कि आप httppost कर सकें और फॉर्म से वैल्यू प्राप्त कर सकें।
यदि आप अपना मार्ग डीफ़ बदलना नहीं चाहते हैं। क्वेरी स्ट्रिंग पैरामीटर का उपयोग करें। यदि आप चाहते हैं कि आपकी क्रिया विधि में कई पैरामीटर न हों तो [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
संबंधित सवाल
नए सवाल
c#
C # (उच्चारण "तेज देखें") Microsoft द्वारा विकसित एक उच्च स्तरीय, सांख्यिकीय रूप से टाइप किया हुआ, बहु-प्रतिमान प्रोग्रामिंग भाषा है। C # कोड आमतौर पर Microsoft के .NET परिवार के टूल और रन-टाइम को लक्षित करता है, जिसमें .NET फ्रेमवर्क, .NET कोर और Xamarin अन्य शामिल हैं। C # या C # के औपचारिक विनिर्देश में लिखे गए कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें।
DettaglioDescrizione
में एकाधिक पैरामीटर कैसे प्राप्त करें और दूसरा यह है: उन्हें दृश्य में कैसे पास किया जाए।