এএসপি.নেট এমভিসি এইচটিএমএল। ড্রপডাউনলিস্ট নির্বাচিত মূল্য


103

আমি এটি আরসি 1 চেষ্টা করেছি এবং তারপরে আরসি 2 তে আপগ্রেড করেছি যা সমস্যার সমাধান করেনি।

// in my controller
ViewData["UserId"] = new SelectList(
    users, 
    "UserId", 
    "DisplayName", 
    selectedUserId.Value); // this has a value

ফলাফল: সিলেক্টভ্যালু সম্পত্তিটি অবজেক্টে সেট করা থাকে

// in my view
<%=Html.DropDownList("UserId", (SelectList)ViewData["UserId"])%>

ফলাফল: সমস্ত প্রত্যাশিত বিকল্পগুলি ক্লায়েন্টকে রেন্ডার করা হয়, তবে নির্বাচিত বৈশিষ্ট্য সেট করা হয় না। সিলেক্টভ্যালুতে থাকা আইটেমটি তালিকার মধ্যে রয়েছে তবে তালিকার প্রথম আইটেমটি সর্বদা নির্বাচিত হিসাবে ডিফল্ট হয়।

আমার এটি কীভাবে করা উচিত?

আপডেট জন ফেমেনিেলার জবাবের জন্য ধন্যবাদ আমি সমস্যাটি কী তা জানতে পেরেছি। "ইউজারআইডি" এমন একটি বৈশিষ্ট্য যা আমার ভিউটিতে দৃ strongly়ভাবে টাইপ করা হয়। যখন এইচটিএমএল.ড্রপডাউনলিস্ট ("ইউজারআইডি" অন্য কোনও নামে পরিবর্তিত হয় তবে "ইউজারআইডি", নির্বাচিত মানটি সঠিকভাবে রেন্ডার হয়।

ফলাফলটি যদিও মডেলটির সাথে আবদ্ধ নয়।


আপনি কি নিশ্চিত যে মানটি তালিকায় রয়েছে?
জন শিহান

সমস্যাটি এখনও এএসপি.নেট এমভিসি
ম্যাথিয়াস এফ

ইউজারআইডি কি নির্বাচিত !?
ফুলভিও

আপনি যদি মনে করেন যে আপডেটের ক্ষেত্রে মানটি কীভাবে আবদ্ধ করা হয় তবে যদি আপনার ইনপুটটির নামটি আপনার সম্পত্তির মতো না হয়?
ryudice

উত্তর:


68

এইভাবে আমি এই সমস্যাটি স্থির করেছি:

আমার নিম্নলিখিত ছিল:

নিয়ন্ত্রক:

ViewData["DealerTypes"] = Helper.SetSelectedValue(listOfValues, selectedValue) ;

দৃশ্য

<%=Html.DropDownList("DealerTypes", ViewData["DealerTypes"] as SelectList)%>

নিম্নলিখিত দ্বারা পরিবর্তন:

দৃশ্য

<%=Html.DropDownList("DealerTypesDD", ViewData["DealerTypes"] as SelectList)%>

এটি প্রদর্শিত হয় যে ড্রপডাউনটিতে অবশ্যই ভিউডাটা নামটি থাকতে হবে: এস অদ্ভুত তবে এটি কার্যকর।


19
"ড্রপডাউনটির জন্য +1 এর একই নামের ভিউডাটা নামটি অবশ্যই পাওয়া উচিত নয়" বিগ থ্যাঙ্কস
ড্যানিয়েল ডায়সন

ধন্যবাদ!!! আপনি কেন বেশিরভাগ ঘন্টা ভাবছেন যে কেন এটি কার্যকর হয়নি :)
জেন

1
এটি নির্বাচিত মানের জন্য কাজ করে, তবে আপনি যখন ডিবিতে "ডিলারটাইপস" আপডেট করার চেষ্টা করেন তখন একটি সমস্যা দেখা দেয় কারণ এটি ড্রপডাউনলিস্ট এখন "ডিলারটাইপসডিডি" এর সাথে আবদ্ধ, যা মডেলটিতে নেই। ড্রপডাউনলিস্টে একটি লুকানো ক্ষেত্র এবং এইচটিএমএলএ্যাট্রিবিউট যুক্ত করার জন্য একটি কার্যপ্রণালী হ'ল: <ইনপুট টাইপ = "লুকানো" নাম = "ডিলারটাইপস" আইডি = "ডিলারটাইপস" মান = "" /> <% = এইচটিএমএল। ড্রপডাউনলিস্ট ("ডিলারটাইপসডিডি", ভিউডাটা [ "ডিলারটাইপস"] সিলেক্টলিস্ট হিসাবে, নতুন on @ পরিবর্তন = "ডিলারটাইপস.ভ্যালু = এটি.ভ্যালু"})%>
জিম

3
ভিউডাটা নামের সাথে আপনি 'ডিএস' যুক্ত করার চেয়ে আরও ভাল, এভাবে মডেলটির বাধ্যবাধকতাটি নষ্ট করবেন না ...
নোসাইট

1
কি খারাপ অবস্থা! এটি এমভিসি 5 এ স্থির নয় ??? @ পল হ্যাচার দ্বারা উল্লিখিত অন্য কৌশল হিসাবে, নির্বাচিত আইডিটি ভিউডাটা ["ডিলারটাইপস"] এ অনুলিপি করুন।
jsgoupil

51

এটা চেষ্টা কর:

public class Person {
    public int Id { get; set; }
    public string Name { get; set; }
}

এবং তারপর:

var list = new[] {   
    new Person { Id = 1, Name = "Name1" }, 
    new Person { Id = 2, Name = "Name2" }, 
    new Person { Id = 3, Name = "Name3" } 
};

var selectList = new SelectList(list, "Id", "Name", 2);
ViewData["People"] = selectList;

Html.DropDownList("PeopleClass", (SelectList)ViewData["People"])

এমভিসি আরসি 2 সহ, আমি পেয়েছি:

<select id="PeopleClass" name="PeopleClass">
    <option value="1">Name1</option>
    <option selected="selected" value="2">Name2</option>
    <option value="3">Name3</option>
</select>

এটি কারণ অনুসন্ধানে সহায়ক ছিল। সংযোজনগুলি প্রতিফলিত করতে আমি আমার প্রশ্ন আপডেট করেছি।
blu

মডেল প্রথম হয়? নিয়ামক দ্বিতীয়? এটি তৃতীয় এবং তৃতীয়টি পরিষ্কার, তবে ২ টি প্রথম .. ???
আরআর

উত্তম উত্তর, তবে ভিউমোডেল ব্যবহার করা কি ভাল নয়?
জেস

@ জেস: আমি এই উত্তরটি 5 বছর আগে ২০০৯ এর মার্চ মাসে লিখেছি। সময় বদলেছে! আপডেট করতে নির্দ্বিধায়। :)
জন Feminella

5

আপনি এখনও ড্রপডাউনটির নাম "ইউজারআইডি" হিসাবে রাখতে পারেন এবং এখনও আপনার জন্য মডেল বাইন্ডিং সঠিকভাবে কাজ করতে পারেন।

এটির কাজ করার জন্য একমাত্র প্রয়োজন হ'ল ভিউডাটা কীটিতে সিলেক্টলিস্ট রয়েছে যা আপনি বাঁধতে চান সেই মডেল সম্পত্তি হিসাবে একই নাম নেই। আপনার নির্দিষ্ট ক্ষেত্রে এটি হবে:

// in my controller
ViewData["Users"] = new SelectList(
    users, 
    "UserId", 
    "DisplayName", 
    selectedUserId.Value); // this has a value

// in my view
<%=Html.DropDownList("UserId", (SelectList)ViewData["Users"])%>

এটি ইউজারআইডি নামক একটি নির্বাচিত উপাদান উত্পাদন করবে যা আপনার মডেলটিতে ইউজারআইডি সম্পত্তি হিসাবে একই নাম রয়েছে এবং অতএব মডেল বাইন্ডার এইচটিএমএল এর নির্বাচিত উপাদানটিতে এইচটিএমএল.ড্রপডাউনলিস্ট সহায়ক দ্বারা উত্পাদিত মান দ্বারা সেট করবে।

আমি নিশ্চিত নই কেন সেই নির্দিষ্ট এইচটিএমএল.ড্রপডাউনলিস্ট কনস্ট্রাক্টর আপনি যখন সুনির্দিষ্ট নামের সমান একটি কী দিয়ে ভিউডাটাতে বাছাই তালিকাটি রাখবেন তখন সलेक्टলিস্টে নির্দিষ্ট মানটি নির্বাচন করবেন না। আমার সন্দেহ হয় যে ড্রপডাউনলিস্ট সহায়কটি অন্যান্য পরিস্থিতিতে কীভাবে ব্যবহৃত হয়, যেখানে কনভেনশনটি হ'ল আপনার মডেলটির সম্পত্তি হিসাবে একই নামে ভিউডাটাতে একটি নির্বাচন তালিকা রয়েছে with এটি সঠিকভাবে কাজ করবে:

// in my controller
ViewData["UserId"] = new SelectList(
    users, 
    "UserId", 
    "DisplayName", 
    selectedUserId.Value); // this has a value

// in my view
<%=Html.DropDownList("UserId")%>

অনেক সাথীকে ধন্যবাদ, সর্বোপরি উত্তরগুলির জন্য এটি আমার পক্ষে কাজ করেছে, কেন জানি না তবে এটি কেন হয়েছিল
লামিন সান্নেহ

অবশেষে! কয়েক ঘন্টা চেষ্টা করার পরে অবশেষে আমি আপনার "একমাত্র প্রয়োজনীয়তা" পেয়েছি। এটা এটা করেছে।
স্টিভক্যাভ

2

আমরা যদি মনে করি না যে এটি কোনও বাগটি ঠিক করা উচিত, তবে ইজারাতে এমএসডিএন ডকুমেন্টটি উন্নত করবে। বিভ্রান্তিকর সত্যই এর খারাপ দস্তাবেজ থেকে আসে। ইন দুটিই MSDN , এটা পরামিতি ব্যাখ্যা নাম , যেমন

Type: System.String
The name of the form field to return.

এর অর্থ হ'ল এটি যে চূড়ান্ত এইচটিএমএল তৈরি করে তা সেই পরামিতিটি নির্বাচন করা ইনপুটটির নাম হিসাবে ব্যবহার করবে। কিন্তু, এটি আসলে এর চেয়ে বেশি বোঝায়।

আমার ধারণা ডিজাইনার ধারণা করে যে ব্যবহারকারীরা ড্রপডাউনলিস্ট প্রদর্শনের জন্য একটি ভিউ মডেল ব্যবহার করবে, একই পোস্টে ফিরে একই ভিউ মডেলটি ব্যবহার করবে । তবে অনেক ক্ষেত্রেই আমরা এই ধারণাকে সত্যই অনুসরণ করি না।

উপরের উদাহরণটি ব্যবহার করুন,

public class Person {
    public int Id { get; set; }
    public string Name { get; set; }
}

আমরা যদি অনুমানটি অনুসরণ করি তবে আমাদের এই ড্রপডাউনলিস্ট সম্পর্কিত দৃশ্যের জন্য একটি ভিউ মডেল নির্ধারণ করা উচিত

public class PersonsSelectViewModel{
    public string SelectedPersonId,
    public List<SelectListItem> Persons;
}

কারণ যখন পোস্ট ফিরে আসবে, কেবলমাত্র নির্বাচিত মানটি আবার পোস্ট করবে, সুতরাং এটি ধরে নিয়েছে এটি মডেলের সম্পত্তি সিলেক্টডপারসনআইডি-তে ফিরে পোস্ট করা উচিত, যার অর্থ এইচটিএমএল.ড্রপডাউনলিস্টের প্রথম প্যারামিটারের নাম ' ' হওয়া উচিত। সুতরাং, ডিজাইনার মনে করেন যে ভিউটিতে মডেল ভিউটি প্রদর্শন করার সময়, মডেলের সম্পত্তি SelectedPersonId এর সেই ড্রপডাউন তালিকার ডিফল্ট মান রাখা উচিত। এমনকি আপনার তালিকার <সलेक्टলিস্ট আইটেম> ব্যক্তিরা ইতিমধ্যে নির্বাচিত পতাকাটি সেট করে যা কোনটি নির্বাচিত / ডিফল্ট হয়েছে তা নির্ধারণ করে ভেবেছিল, টিএমএল.ড্রপডাউনলিস্ট আসলে এটিকে উপেক্ষা করবে এবং এটির নিজের পুনঃনির্মাণ করবে আইএনউমেবল <সিলেক্টলিস্ট আইটেম> এবং নামের ভিত্তিতে ডিফল্ট / নির্বাচিত আইটেমটি সেট করবে।

Asp.net এমভিসি থেকে কোড এখানে

private static MvcHtmlString SelectInternal(this HtmlHelper htmlHelper, ModelMetadata metadata,
            string optionLabel, string name, IEnumerable<SelectListItem> selectList, bool allowMultiple,
            IDictionary<string, object> htmlAttributes)
{
    ...

    bool usedViewData = false;

    // If we got a null selectList, try to use ViewData to get the list of items.
    if (selectList == null)
    {
        selectList = htmlHelper.GetSelectData(name);
        usedViewData = true;
    }

    object defaultValue = (allowMultiple) ? htmlHelper.GetModelStateValue(fullName, typeof(string[])) : htmlHelper.GetModelStateValue(fullName, typeof(string));

    // If we haven't already used ViewData to get the entire list of items then we need to
    // use the ViewData-supplied value before using the parameter-supplied value.
    if (defaultValue == null && !String.IsNullOrEmpty(name))
    {
        if (!usedViewData)
        {
            defaultValue = htmlHelper.ViewData.Eval(name);
        }
        else if (metadata != null)
        {
            defaultValue = metadata.Model;
        }
    }

    if (defaultValue != null)
    {
        selectList = GetSelectListWithDefaultValue(selectList, defaultValue, allowMultiple);
    }

    ...

    return tagBuilder.ToMvcHtmlString(TagRenderMode.Normal);
}

সুতরাং, কোডটি আসলে আরও এগিয়ে গেছে, এটি কেবল মডেলটিতেই নামটি দেখার চেষ্টা করে না, তবে ভিউডেটাতেও এটি খুঁজে পাওয়ার সাথে সাথে এটি নির্বাচিত তালিকাটি পুনর্নির্মাণ করবে এবং আপনার মূল নির্বাচিতটিকে উপেক্ষা করবে।

সমস্যাটি হ'ল, অনেক ক্ষেত্রে আমরা সত্যিই সেভাবে ব্যবহার করি না। আমরা কেবলমাত্র এক / একাধিক আইটেম (গুলি) দিয়ে নির্বাচিত সেটটিকে সত্য দিয়ে একটি নির্বাচন তালিকাতে ফেলে দিতে চাই।

অবশ্যই সমাধানটি সহজ, এমন একটি নাম ব্যবহার করুন যা মডেল বা ভিউডেটাতে নয়। যখন এটি কোনও মিল খুঁজে পাবে না, এটি আসল সিলেক্টলিস্টটি ব্যবহার করবে এবং মূল নির্বাচিত প্রভাব ফেলবে।

তবে আমি এখনও মনে করি এমভিসি আরও একটি শর্ত যুক্ত করে এটি উন্নত করা উচিত

if ((defaultValue != null) && (!selectList.Any(i=>i.Selected)))
{
    selectList = GetSelectListWithDefaultValue(selectList, defaultValue, allowMultiple);
}

কারণ, যদি মূল সিলেক্টলিস্টটিতে ইতিমধ্যে একটি নির্বাচিত থাকে তবে আপনি কেন এটিকে উপেক্ষা করবেন?

শুধু আমার চিন্তা।


এটি আমি এখনও অবধি পড়েছি সেরা ব্যাখ্যা। আমাকে অনেক মাথাব্যথা বাঁচিয়েছে। আমাকে যা করতে হয়েছিল তা হল ভিউমডেল সম্পত্তির মূল্য নির্ধারণ এবং এটি কার্যকর হয়েছিল। ধন্যবাদ।
মূসা মাচুয়া

2

আগের এমভিসি 3 পোস্টের কোডটি কাজ করে না তবে এটি একটি ভাল শুরু। আমি এটা ঠিক করব. আমি এই কোডটি পরীক্ষা করে দেখেছি এবং এটি এমভিসি 3 রেজার সি-তে কাজ করে # এই কোডটি কোনও প্রত্যাবর্তন করে এমন একটি সম্পত্তি তৈরি করতে ভিউমোডেল প্যাটার্ন ব্যবহার করে List<SelectListItem>

মডেল ক্লাস

public class Product
{
    public string Name { get; set; }
    public decimal Price { get; set; }
}

ভিউমোডেল ক্লাস

using System.Web.Mvc;

public class ProductListviewModel
{
    public List<SelectListItem> Products { get; set; }
}

নিয়ামক পদ্ধতি

public ViewResult List()
{
    var productList = new List<SelectListItem>();

    foreach (Product p in Products)
    {
        productList.Add(new SelectListItem
        {
            Value = p.ProductId.ToString(),
            Text = "Product: " + p.Name + " " + p.Price.ToString(),
            // To set the selected item use the following code 
            // Note: you should not set every item to selected
            Selected = true
        });
    }

    ProductListViewModel productListVM = new ProductListViewModeld();

    productListVM.Products = productList;

    return View(productListVM);
}

দৃশ্য

@model MvcApp.ViewModels.ProductListViewModel

@using (Html.BeginForm())
{
    @Html.DropDownList("Products", Model.Products)
}

এইচটিএমএল আউটপুট কিছু হবে

<select id="Products" name="Products">
    <option value="3">Product: Widget 10.00</option>
    <option value="4">Product: Gadget 5.95</option>
</select>

আপনি কীভাবে আউটপুট ফর্ম্যাট করবেন তার উপর নির্ভর করে। আশা করি এটা কাজে লাগবে. কোড কাজ করে।


1
এটি selectedবিকল্প সেট করে না ।
জেস

সিলেক্টলিস্ট আইটেম ব্যবহার করে নির্বাচিত আইটেমটি সেট করতে, নির্বাচিত সম্পত্তিটিকে সত্যে সেট করুন।
Wayne.blackmon

1

এটি সিলেক্ট এক্সটেনশন ক্লাসে একটি ত্রুটি বলে মনে হচ্ছে কারণ এটি নির্বাচিত আইটেমটির মডেলের চেয়ে ভিউডাটা কেবল পরীক্ষা করবে। সুতরাং কৌশলটি হ'ল মডেল থেকে নির্বাচিত আইটেমটি সম্পত্তির নামে ভিউডাটা সংগ্রহে কপি করা।

এটি এমভিসি ফোরামে আমি যে উত্তর দিয়েছি তা থেকে নেওয়া হয়েছে, আমার একটি ব্লগ পোস্টে আরও সম্পূর্ণ উত্তর আছে যা কাজীর ড্রপডাউনলিস্ট বৈশিষ্ট্য ব্যবহার করে ...

একটি মডেল দেওয়া

public class ArticleType
{
   public Guid Id { get; set; }
   public string Description { get; set; }
}

public class Article
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public ArticleType { get; set; }
}

এবং এর একটি বেসিক ভিউ মডেল

public class ArticleModel
{
     public Guid Id { get; set; }
     public string Name { get; set; }

     [UIHint("DropDownList")]
     public Guid ArticleType { get; set; }
}

তারপরে আমরা নিম্নরূপে একটি ড্রপডাউনলিস্ট সম্পাদক টেম্পলেট লিখি ..

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<script runat="server">  
    IEnumerable<SelectListItem> GetSelectList()
    {
        var metaData = ViewData.ModelMetadata;
        if (metaData == null)
        {
            return null;
        }

        var selected = Model is SelectListItem ? ((SelectListItem) Model).Value : Model.ToString();
        ViewData[metaData.PropertyName] = selected;

        var key = metaData.PropertyName + "List";
        return (IEnumerable<SelectListItem>)ViewData[key];
    }
</script>
<%= Html.DropDownList(null, GetSelectList()) %>

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

আপনার নিয়ামকটিতে আমাদের তখন ...

public ArticleController 
{
     ...
     public ActionResult Edit(int id)
     {
          var entity = repository.FindOne<Article>(id);
          var model = builder.Convert<ArticleModel>(entity);

          var types = repository.FindAll<ArticleTypes>();
          ViewData["ArticleTypeList"] = builder.Convert<SelectListItem>(types);

          return VIew(model);
     }
     ...
}

উত্তরের জন্য ধন্যবাদ, আমাকে এটি পরীক্ষা করে দেখতে হবে।
ব্লু

0

সমস্যাটি হ'ল ড্রপবক্সগুলি লিস্টবক্সগুলির মতো একইভাবে কাজ করে না, কমপক্ষে যেভাবে এএসপি.নেট এমভিসি 2 ডিজাইনটি প্রত্যাশা করে: ড্রপবক্স কেবলমাত্র শূন্য বা একটি মানকে অনুমতি দেয়, কারণ তালিকাবক্সগুলি একাধিক মান নির্বাচন করতে পারে। সুতরাং, এইচটিএমএল-এর সাথে কঠোর হওয়ায় সেই মানটি "নির্বাচিত" পতাকা হিসাবে বিকল্প তালিকায় থাকা উচিত নয়, তবে ইনপুটটিতেই।

নিম্নলিখিত উদাহরণটি দেখুন:

<select id="combo" name="combo" value="id2">
  <option value="id1">This is option 1</option>
  <option value="id2" selected="selected">This is option 2</option>
  <option value="id3">This is option 3</option>
</select>

<select id="listbox" name="listbox" multiple>
  <option value="id1">This is option 1</option>
  <option value="id2" selected="selected">This is option 2</option>
  <option value="id3">This is option 3</option>
</select>

কম্বোতে বিকল্পটি নির্বাচিত রয়েছে তবে এর মান বৈশিষ্ট্য সেটও রয়েছে । সুতরাং, আপনি যদি এএসপি.নেট এমভিসি 2 কে একটি ড্রপবক্স রেন্ডার করতে চান এবং একটি নির্দিষ্ট মানও নির্বাচিত হন (যেমন, ডিফল্ট মানগুলি ইত্যাদি), আপনার এটির মতো রেন্ডারিংয়ে একটি মান দেওয়া উচিত:

// in my view             
<%=Html.DropDownList("UserId", selectListItems /* (SelectList)ViewData["UserId"]*/, new { @Value = selectedUser.Id } /* Your selected value as an additional HTML attribute */)%>

0

এএসপি.নেট এমভিসি 3 এ আপনি ভিউডাটাতে কেবল আপনার তালিকা যুক্ত করতে পারেন ...

var options = new List<SelectListItem>();

options.Add(new SelectListItem { Value = "1", Text = "1" });
options.Add(new SelectListItem { Value = "2", Text = "2" });
options.Add(new SelectListItem { Value = "3", Text = "3", Selected = true });

ViewData["options"] = options;

... এবং তারপরে এটি আপনার রেজার ভিউতে নাম দিয়ে রেফারেন্স করুন ...

@Html.DropDownList("options")

ড্রপডাউনলিস্ট কলটিতে আপনাকে তালিকাটি ম্যানুয়ালি "ব্যবহার" করতে হবে না। এটি এভাবে করা সঠিকভাবে আমার জন্য নির্বাচিত মানটি সেট করে।

দাবি পরিত্যাগী:

  1. ওয়েব ফর্ম ভিউ ইঞ্জিন দিয়ে এটি চেষ্টা করেনি, তবে এটিও কার্যকর হওয়া উচিত।
  2. আমি এটি v1 এবং v2 এ পরীক্ষা করে দেখিনি, তবে এটি কার্যকর হতে পারে।

0

আমি পছন্দসই ফলাফলটি পরিচালনা করতে পেরেছি, তবে কিছুটা ভিন্ন পদ্ধতির সাথে। ড্রপডাউনলিস্টে আমি মডেলটি ব্যবহার করেছি এবং তারপরে এটি রেফারেন্স করেছি। আপনি যা খুঁজছিলেন এটি এটি ছিল কিনা তা নিশ্চিত নয়।

@Html.DropDownList("Example", new SelectList(Model.FeeStructures, "Id", "NameOfFeeStructure", Model.Matters.FeeStructures))

Model.Matters.FreeSturesures উপরে উপরে আমার আইডি, যা নির্বাচন করা উচিত আইটেম আপনার মূল্য হতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.