मेरे पास दो अलग-अलग टेबल हैं उनमें से एक उत्पाद है, दूसरा एक श्रेणियाँ है। श्रेणियाँ तालिका में आईडी और नाम के रूप में दो कॉलम हैं, उत्पाद तालिका में नाम, टीडब्ल्यूएस, ओडब्ल्यूएस, और श्रेणी आईडी के रूप में चार कॉलम हैं। मैं शीर्षक पृष्ठ पर श्रेणी आईडी के बजाय श्रेणीनाम प्रदर्शित करता हूं।

मेरे पास उत्पाद जोड़ने के लिए पेज बनाएं है। इस पृष्ठ में मैं श्रेणी आईडी जोड़ने के लिए ड्रॉपडाउन सूची का उपयोग करना चाहता हूं और फिर से मैं श्रेणी आईडी के बजाय श्रेणी नाम दिखाना चाहता हूं।

सबसे पहले, मैंने Create() मेथड पर काम किया।

public IActionResult Create()
    {
        List<SelectListItem> selectListItem = _context.Categories.
                                               Select(i=> new SelectListItem()
                                               {
                                                   Text = i.Name,
                                                   Value = i.Id.ToString()
                                               }).ToList();
        ViewBag.selectedListItem = selectListItem;
        return View();
    }

उसके बाद मैंने Create.cshtml . पर काम किया

<div class="form-group">
                <label asp-for="CategoryId" class="control-label"></label>
                @Html.DropDownListFor(m => m.Category.Id,(List<SelectListItem>)ViewBag.selectedListItem, new {@class="form-group"})
                <span asp-validation-for="CategoryId" class="text-danger"></span>
            </div>

m => m.Category.Id यहां श्रेणी Project.Models.Products से प्राप्त हो रही है।

अंत में, मैंने Create(Products Products) मेथड पर काम किया।

public async Task<IActionResult> Create(Products products)
    {

        if (ModelState.IsValid)
        {
            Products existingTitle = await _context.Products.SingleOrDefaultAsync(
               x => x.Name == products.Name);

            if (existingTitle != null)
            {
                ModelState.AddModelError(string.Empty, "This data already exists.");
                return View(products);
            }
            else
            {
                var ctg = _context.Categories.Where(m =>m.Id==products.Category.Id).FirstOrDefault();
                products.Category= ctg;
                products.Id = Guid.NewGuid();
                _context.Add(products);
                await _context.SaveChangesAsync();
                return RedirectToAction(nameof(Index));
            }

            
        }
        return View(products);
    }

जब मैं एक नया उत्पाद जोड़ने का प्रयास करता हूं तो मुझे यह त्रुटि मिलती है। अनुरोध संसाधित करते समय एक हैंडल न किया गया अपवाद उत्पन्न हुआ। NullReferenceException: ऑब्जेक्ट संदर्भ किसी ऑब्जेक्ट की आवृत्ति पर सेट नहीं है। lambda_method(बंद)

मैंने इस तरह कोड में बदलाव किया है:

var ctg = _context.Categories.Where(m =>m.Id==products.CategoryId).FirstOrDefault();

इस बार, उत्पाद जोड़ा जा सकता है लेकिन इस उत्पाद की श्रेणीबद्ध चयनित श्रेणी के बराबर नहीं है। श्रेणी आईडी हमेशा 00000000-0000-0000-0000-000000000000 होती है।

तो, मैं इस मुद्दे को कैसे ठीक कर सकता हूं।

0
simoncare 14 जिंदा 2021, 23:09
क्या product.category.id में एक मान है और आप product.category.id में एक मान कहां सेट कर रहे हैं
 – 
Hammad Shabbir
15 जिंदा 2021, 00:27
क्षमा करें, मैंने अंतिम कोड ब्लॉक लिखा था। मैं बस ठीक करता हूँ। var ctg = _context.Categories.Where(m =>m.Id==products.CategoryId).FirstOrDefault (); इसके साथ, कोड डिफ़ॉल्ट गाइड ıd के साथ काम कर रहा है। मैंने उत्पाद का मूल्य निर्धारित किया है। उत्पादों के सूचकांक () में श्रेणी आईडी
 – 
simoncare
15 जिंदा 2021, 01:01
' var उत्पाद = _context.products .Select(m => new Products() {Name = m.Name, OWS = m.OWS, TWS = m.TWS श्रेणीनाम = m.Category.Name, categoryId=m.Category.Id }); '
 – 
simoncare
15 जिंदा 2021, 01:05
हाय @simoncare, इस मामले के बारे में कोई अपडेट?
 – 
Yinqiu
21 जिंदा 2021, 11:48
हाय, @Yinqiu मैं इस मुद्दे को ठीक करता हूं। प्रोजेक्ट में बहुत सारे श्रेणी और आईडी संयोजन हैं जैसे श्रेणी आईडी श्रेणी। आईडी श्रेणियाँ। आईडी। मैं विश्लेषण करता हूं कि कौन सा है, उसके बाद मैं आपका समाधान लागू करता हूं, यह काम करता है। धन्यवाद।
 – 
simoncare
21 जिंदा 2021, 15:28

1 उत्तर

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

मैं आपके मॉडलों के बीच संबंधों के बारे में बिल्कुल स्पष्ट नहीं हूं, लेकिन आप नीचे मेरा एक सरल कामकाजी उदाहरण देख सकते हैं।

आदर्श:

public class Category
{
    public Guid Id { get; set; }
    public string Name { get; set; }
}
public class Product
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string TWS { get; set; }
    public string OWS { get; set; }
    public Category Category { get; set; }
    public Guid CategoryId { get; set; }
}

कार्य:

 public IActionResult Create()
    {
        List<SelectListItem> selectListItem = _context.Categories.
                                               Select(i => new SelectListItem()
                                               {
                                                   Text = i.Name,
                                                   Value = i.Id.ToString()
                                               }).ToList();
        ViewBag.selectedListItem = selectListItem;
        return View();
    }
    [HttpPost]
    public async Task<IActionResult> Create(Product products)
    {

        if (ModelState.IsValid)
        {
            Product existingTitle = await _context.Products.SingleOrDefaultAsync(
               x => x.Name == products.Name);

            if (existingTitle != null)
            {
                ModelState.AddModelError("Error", "This data already exists.");
                List<SelectListItem> selectListItem = _context.Categories.
                                             Select(i => new SelectListItem()
                                             {
                                                 Text = i.Name,
                                                 Value = i.Id.ToString()
                                             }).ToList();
                ViewBag.selectedListItem = selectListItem;
                return View();
            }
            else
            {
                var ctg = _context.Categories.Where(m => m.Id == products.Category.Id).FirstOrDefault();
                products.Category = ctg;
                products.Id = Guid.NewGuid();
                _context.Add(products);
                await _context.SaveChangesAsync();
                return RedirectToAction(nameof(Index));
            }
        }
        return View();
    }

राय:

@model Product
@{
    ViewData["Title"] = "Create";
}
<form asp-action="Create">
    <div class="form-group">
        <span class="text-danger">@Html.ValidationMessage("Error")</span>
        <input asp-for="Name" />
        @*//...*@
        <label asp-for="CategoryId" class="control-label"></label>
        @Html.DropDownListFor(m => m.Category.Id, (List<SelectListItem>)ViewBag.selectedListItem, new { @class = "form-group" })
        <span asp-validation-for="Category.Id" class="text-danger"></span>
    </div>
    <input type="submit" value="Save"/>
</form>

वैसे, यदि आप कोड का उपयोग करना चाहते हैं:

var ctg = _context.Categories.Where(m =>m.Id==products.CategoryId).FirstOrDefault();

आपको ड्रॉपडाउन को इसमें बदलना होगा:

 @Html.DropDownListFor(m => m.CategoryId,(List<SelectListItem>)ViewBag.selectedListItem, new {@class="form-group"})

परीक्षा परिणाम: यहां छवि विवरण दर्ज करें

1
Yinqiu 15 जिंदा 2021, 06:23
यदि यह आपकी आवश्यकताओं को पूरा नहीं करता है, तो आप अपना मॉडल साझा कर सकते हैं।
 – 
Yinqiu
15 जिंदा 2021, 06:15
सार्वजनिक श्रेणी के उत्पाद { सार्वजनिक गाइड आईडी { प्राप्त करें; सेट; } सार्वजनिक स्ट्रिंग नाम { प्राप्त करें; सेट; } सार्वजनिक स्ट्रिंग OWS { प्राप्त करें; सेट; } सार्वजनिक स्ट्रिंग TWS { प्राप्त करें; सेट; } सार्वजनिक गाइड श्रेणी आईडी { प्राप्त करें; सेट; } [नॉटमैप्ड] पब्लिक गाइड कैटेगरीआईडी ​​{ प्राप्त करें; सेट; } सार्वजनिक स्ट्रिंग श्रेणीनाम { प्राप्त करें; सेट; } सार्वजनिक आभासी श्रेणियाँ श्रेणी { प्राप्त करें; सेट; } }
 – 
simoncare
15 जिंदा 2021, 08:40
क्या मेरा उदाहरण आपकी आवश्यकताओं को पूरा नहीं करता है?
 – 
Yinqiu
15 जिंदा 2021, 08:41
इस मॉडल और मेरे में कोई अंतर नहीं है।
 – 
Yinqiu
15 जिंदा 2021, 08:42
मैं आपकी टिप्पणी के बाद श्रेणी आईडी जोड़ता हूं, लेकिन इस बार मुझे अलग त्रुटि मिलती है, एसक्लएक्सप्शन: अमान्य कॉलम नाम 'श्रेणी नाम'। अब मैं इसे ठीक करने की कोशिश कर रहा हूं।
 – 
simoncare
15 जिंदा 2021, 08:53