আমি কীভাবে এএসপিএনটি এমভিসিতে একটি নির্বাচন তালিকাতে একটি আইটেম যুক্ত করতে পারি


112

মূলত আমি একটি সিলেক্টলিস্টের শুরুতে 0 এর ডিফল্ট মান এবং "- একটি নির্বাচন করুন -" এর পাঠ্য মান সহ একটি আইটেম সন্নিবেশ করতে দেখছি

কিছুটা এইরকম

SelectList list = new SelectList(repository.func.ToList());
ListItem li = new ListItem(value, value);
list.items.add(li);

এই কাজ করা যাবে?


2
SelectListআইটেমগুলিতে সরাসরি ডেটা বাইন্ডিংয়ের জন্য সত্যই কেবল সহায় বলে মনে হচ্ছে। আপনি যদি আইটেমগুলি যুক্ত করেন তবে List<SelectListItem>পরিবর্তে ম্যানুয়ালি ব্যবহার করুন।
কাই হার্টম্যান

গৃহীত উত্তর এবং ভোটের সংখ্যা দেওয়া, আমি কি আপনাকে উত্তরটি প্রতিবিম্বিত করতে প্রশ্নটি কিছুটা পরিবর্তন করার পরামর্শ দিতে পারি i, e, "আমি কীভাবে ফাঁকা মান আইটেমটি এএসপিএনটি এমভিসি-র একটি নির্বাচনী তালিকাতে যুক্ত করতে পারি"? তবে কৃতিত্বের জন্য @ এইচ-কুকুরকে মূল প্রশ্নের উত্তর দেওয়ার জন্য "আমি কীভাবে একটি আইটেম যুক্ত করতে পারি"
অ্যান্ড্রুড

উত্তর:


150

আপনি যদি 0 এর মানটির উপর জেদ না করেন তবে সত্যিই এটি করার দরকার নেই এইচটিএমএলহেলপার ড্রপডাউনলিস্ট এক্সটেনশন আপনাকে একটি বিকল্প লেবেল সেট করতে দেয় যা শূন্য মানের সাথে নির্বাচনের প্রাথমিক মান হিসাবে প্রদর্শিত হয়। কেবলমাত্র ড্রপডাউনলিস্ট স্বাক্ষরগুলির একটিতে বিকল্প অপশন লেবেল ব্যবহার করুন।

<%= Html.DropDownList( "DropDownValue",
                       (IEnumerable<SelectListItem>)ViewData["Menu"],
                        "-- Select One --" ) %>

1
আপনি যদি 0 টির জন্য জিদ করেন? মানটি যদি নাল / একটি খালি স্ট্রিং হয় তবে এটি মডেল বাইন্ডিংয়ের ক্ষেত্রে সমস্যা সৃষ্টি করতে পারে।
কেজেনসেন

2
আপনি যদি এটি কোন পূর্ববর্তী হিসাবে হিসাবে প্রত্যাশা করে থাকেন, তবে আমি ইনট ব্যবহার করব? এবং এখনও কোনও নির্বাচন না করা থাকলে এটিকে শূন্য রেখে দিন।
tvanfosson

13
এর সাথে সমস্যার সমাধান হ'ল আপনি নিজের নির্বাচিত আইটেমটি হারাবেন।
37 টি তারা

1
@ জেসে ওয়েবেব আমি সন্দেহ করি যে আপনি কেবলমাত্র একটি স্বাক্ষর ব্যবহার করছেন যা নিশ্চিত করতে হবে যা বিকল্প লেবেল, এমএসডিএন.মাইক্রোসফটকম /en-us/library/ee703567.aspx , @Html.DropDownListFor( m => m.MenuSelection, (IEnumerable<SelectListItem>)ViewBag.Menu, "Select One", null )উদাহরণস্বরূপ, htmlAttributesস্বাক্ষরের সাথে বিভ্রান্তি এড়াতে নাল সহ এটি একটি অভিব্যক্তি, মেনু সংখ্যা এবং একটি অবজেক্ট (htmlAttributes) লাগে।
tvanfosson

1
@ তানফানসন - স্পষ্ট করার জন্য আপনাকে ধন্যবাদ। আমি এটি নির্বাচনী তালিকার আইনিউনামেবলের টাইপ হিসাবে কমপ্লেক্স টাইপ সহ ব্যবহার করার চেষ্টা করেছি। অপশন লেবেল মান যুক্ত করার সময় আমাকে dataValueFieldএবং dataTestFieldযা এটি কাজ করে নি তা উল্লেখ করতে হয়েছিল। এটি সম্ভবত আরও কিছু প্রচেষ্টা নিয়ে কাজ করতে পারে তবে আমি বিকল্প সমাধানগুলির মধ্যে একটি ব্যবহার করেছি। যাইহোক ধন্যবাদ!
জেসি ওয়েব

82

আমি একটি সিলেক্টলিস্ট আইটেম পপুলেটিং করে একটি তালিকায় রূপান্তর করে এবং 0 সূচকে একটি মান যুক্ত করে কাজ করতে পেরেছি।

List<SelectListItem> items = new SelectList(CurrentViewSetups, "SetupId", "SetupName", setupid).ToList(); 
items.Insert(0, (new SelectListItem { Text = "[None]", Value = "0" }));
ViewData["SetupsSelectList"] = items;

আমি এইচটিএমএল হেল্পারে -> @ এইচটিএমএল.ড্রপডাউনলিস্টের জন্য
2b77bee6-5445-4c77-b1eb-4df3e5

17

এটা সম্ভব.

//Create the select list item you want to add
SelectListItem selListItem = new SelectListItem() { Value = "null", Text = "Select One" };

//Create a list of select list items - this will be returned as your select list
List<SelectListItem> newList = new List<SelectListItem>();

//Add select list item to list of selectlistitems
newList.Add(selListItem);

//Return the list of selectlistitems as a selectlist
return new SelectList(newList, "Value", "Text", null);

আমি এইচটিএমএল হেল্পারে -> @ এইচটিএমএল.ড্রপডাউনলিস্টের জন্য
2b77bee6-5445-4c77-b1eb-4df3e5

13

আমি @ আশো এর উত্তর পছন্দ করেছি কিন্তু @ রাজান রাওয়ালের মতো আমার নির্বাচিত আইটেমের অবস্থাটি সংরক্ষণ করা দরকার, যদি থাকে তবে। তাই আমি তার পদ্ধতিতে আমার কাস্টমাইজেশন যুক্ত করেছিAddFirstItem()

public static SelectList AddFirstItem(SelectList origList, SelectListItem firstItem)
{
    List<SelectListItem> newList = origList.ToList();
    newList.Insert(0, firstItem);

    var selectedItem = newList.FirstOrDefault(item => item.Selected);
    var selectedItemValue = String.Empty;
    if (selectedItem != null)
    {
        selectedItemValue = selectedItem.Value;
    }

    return new SelectList(newList, "Value", "Text", selectedItemValue);
}

আমি এইচটিএমএল হেল্পারে -> @ এইচটিএমএল.ড্রপডাউনলিস্টের জন্য
2b77bee6-5445-4c77-b1eb-4df3e5

5
private SelectList AddFirstItem(SelectList list)
        {
            List<SelectListItem> _list = list.ToList();
            _list.Insert(0, new SelectListItem() { Value = "-1", Text = "This Is First Item" });
            return new SelectList((IEnumerable<SelectListItem>)_list, "Value", "Text");
        }

এটি আপনার যা প্রয়োজন তা করা উচিত, কেবল আপনার নির্বাচনী তালিকাটি প্রেরণ করুন এবং এটি সূচী 0 তে একটি আইটেম সহ একটি নির্বাচিত তালিকা ফিরিয়ে দেবে

আপনি যে আইটেমটি সন্নিবেশ করতে হবে তার পাঠ্য, মান বা এমনকি সূচকটিও আপনি গ্রাহক করতে পারেন


আমার যদি কিছু নির্বাচিত মান থাকে এবং আমি সেগুলি সংরক্ষণ করতে চাই?
রাজন রাওয়াল

আমি এইচটিএমএল হেল্পারে -> @ এইচটিএমএল.ড্রপডাউনলিস্টের জন্য
2b77bee6-5445-4c77-b1eb-4df3e5

5

এখানে আপনার জন্য এইচটিএমএল সহায়ক

public static SelectList IndividualNamesOrAll(this SelectList Object)
{
    MedicalVarianceViewsDataContext LinqCtx = new MedicalVarianceViewsDataContext();

    //not correct need individual view!
    var IndividualsListBoxRaw =  ( from x in LinqCtx.ViewIndividualsNames 
                                 orderby x.FullName
                                 select x);

    List<SelectListItem> items = new SelectList (
                               IndividualsListBoxRaw, 
                              "First_Hospital_Case_Nbr", 
                              "FullName"
                               ).ToList();

    items.Insert(0, (new SelectListItem { Text = "All Individuals", 
                                        Value = "0.0", 
                                        Selected = true }));

    Object = new SelectList (items,"Value","Text");

    return Object;
}

3

.ToList ()। ঢোকান (..) পদ্ধতি আপনার তালিকার মধ্যে রাখে একটি উপাদান। যে কোনও অবস্থান নির্দিষ্ট করা যায়। টোললিস্টের পরে কেবল যুক্ত করুন nোকানুন (0, "- - প্রথম আইটেম - -")

তোমার গোপন সংকেত

SelectList list = new SelectList(repository.func.ToList());
ListItem li = new ListItem(value, value);
list.items.add(li);

নতুন কোড

SelectList list = new SelectList(repository.func.ToList().Insert(0, "- - First Item - -"));
ListItem li = new ListItem(value, value);
list.items.add(li);

2

খুব মার্জিত নাও লাগতে পারে তবে আমি সাধারণত এরকম কিছু করি:

    var items = repository.func.ToList();
    items.Insert(0, new funcItem { ID = 0, TextValue = "[None]" });
    ViewBag.MyData = new SelectList(items);

1

ঠিক আছে আমি পরিষ্কার কোড পছন্দ করি তাই আমি এটি একটি এক্সটেনশন পদ্ধতি তৈরি করেছি

static public class SelectListHelper
{
    static public SelectList Add(this SelectList list, string text, string value = "", ListPosition listPosition = ListPosition.First)
    {
        if (string.IsNullOrEmpty(value))
        {
            value = text;
        }
        var listItems = list.ToList();
        var lp = (int)listPosition;
        switch (lp)
        {
            case -1:
                lp = list.Count();
                break;
            case -2:
                lp = list.Count() / 2;
                break;
            case -3:
                var random = new Random();
                lp = random.Next(0, list.Count());
                break;
        }
        listItems.Insert(lp, new SelectListItem { Value = value, Text = text });
        list = new SelectList(listItems, "Value", "Text");
        return list;
    }

    public enum ListPosition
    {
        First = 0,
        Last = -1,
        Middle = -2,
        Random = -3
    }
}

ব্যবহার (উদাহরণস্বরূপ):

var model = new VmRoutePicker
    {
     Routes =
     new SelectList(_dataSource.Routes.Select(r => r.RouteID).Distinct())
     };                                     
  model.Routes = model.Routes.Add("All", "All", SelectListHelper.ListPosition.Random);
//or
  model.Routes = model.Routes.Add("All");

1

যেহেতু এই বিকল্পটি বিভিন্ন পদ্ধতিতে প্রয়োজন হতে পারে, তাই আমি কোনও অবজেক্ট বিকাশ করার সিদ্ধান্তে পৌঁছেছি যাতে এটি বিভিন্ন পরিস্থিতিতে এবং ভবিষ্যতের প্রকল্পগুলিতে ব্যবহার করা যায়

প্রথমে আপনার প্রকল্পে এই শ্রেণি যুক্ত করুন

public class SelectListDefaults
{
    private IList<SelectListItem> getDefaultItems = new List<SelectListItem>();

    public SelectListDefaults()
    {
        this.AddDefaultItem("(All)", "-1");
    }
    public SelectListDefaults(string text, string value)
    {
        this.AddDefaultItem(text, value);
    }
    public IList<SelectListItem> GetDefaultItems
    {
        get
        {                
            return getDefaultItems;
        }

    }
    public void AddDefaultItem(string text, string value)
    {        
        getDefaultItems.Add(new SelectListItem() { Text = text, Value = value });                    
    }
}

এখন কন্ট্রোলার অ্যাকশনে আপনি এটি করতে পারেন

    // Now you can do like this
    ViewBag.MainCategories = new SelectListDefaults().GetDefaultItems.Concat(new SelectList(db.MainCategories, "MainCategoryID", "Name", Request["DropDownListMainCategory"] ?? "-1"));
    // Or can change it by such a simple way
    ViewBag.MainCategories = new SelectListDefaults("Any","0").GetDefaultItems.Concat(new SelectList(db.MainCategories, "MainCategoryID", "Name", Request["DropDownListMainCategory"] ?? "0"));
    // And even can add more options
    SelectListDefaults listDefaults = new SelectListDefaults();
    listDefaults.AddDefaultItme("(Top 5)", "-5");
    // If Top 5 selected by user, you may need to do something here with db.MainCategories, or pass in parameter to method 
    ViewBag.MainCategories = listDefaults.GetDefaultItems.Concat(new SelectList(db.MainCategories, "MainCategoryID", "Name", Request["DropDownListMainCategory"] ?? "-1"));

এবং অবশেষে ভিউতে আপনি এই জাতীয় কোড করবেন।

@Html.DropDownList("DropDownListMainCategory", (IEnumerable<SelectListItem>)ViewBag.MainCategories, new { @class = "form-control", onchange = "this.form.submit();" })

0

একটি কাজের আশেপাশে @ tvanfosson এর উত্তর (নির্বাচিত উত্তর) এবং বিকল্পটির মান 0 এ সেট করতে JQuery (বা জাভাস্ক্রিপ্ট) ব্যবহার করা হয়:

$(document).ready(function () {
        $('#DropDownListId option:first').val('0');
    });

আশাকরি এটা সাহায্য করবে.



-5

অন্য কারও কাছে যদি এর চেয়ে ভাল বিকল্প থাকে তবে আমি তা করি না ...

<% if (Model.VariableName == "" || Model.VariableName== null) { %>
   <%= html.DropDpwnList("ListName", ((SelectList) ViewData["viewName"], "", 
        new{stlye=" "})%>
<% } else{ %>
<%= html.DropDpwnList("ListName", ((SelectList) ViewData["viewName"], 
        Model.VariableName, new{stlye=" "})%>
<% }>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.