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


99

আমি কীভাবে এইচটিএমএল.ড্রপডাউনলিস্টফোনের নির্বাচিত মান সেট করতে পারি? আমি অনলাইনে একবার দেখেছি এবং দেখেছি যে নীচের মতো চতুর্থ প্যারামিটার ব্যবহার করে এটি অর্জন করা যেতে পারে:

@Html.DropDownListFor(m => m, new SelectList(Model, "Code", "Name", 0),  "Please select a country")

আমার নির্বাচিত তালিকাটি এর পরে প্রদর্শিত হবে:

<select id="ShipFromCountries" name="ShipFromCountries">
     <option value="">Please select a country</option>
     <option value="GB">United Kingdom</option>
     <option value="US">United States</option>
     ...
</select>

তবে কিছু কারণে ইউনাইটেড কিংডম নির্বাচিত রয়ে গেছে তবে আমি "দয়া করে একটি দেশ নির্বাচন করুন" নির্বাচন করতে চাই।

কেউ কীভাবে জানবেন আমি কীভাবে এটি অর্জন করতে পারি?

সম্পাদনা

কার্যক্ষমতায় কিছুটা পরিবর্তন হয়েছে বলে আমি আমার কোড আপডেট করেছি তবে এখনও মনে হচ্ছে এই সমস্যার মুখোমুখি হচ্ছে। এটি আমার দৃষ্টিতে যা রয়েছে:

@Html.DropDownListFor(n => n.OrderTemplates, new SelectList(Model.OrderTemplates, "OrderTemplateId", "OrderTemplateName", 1), "Please select an order template")

1optionআমি যে আইডিটি নির্বাচন করতে চাই তা হল, আমি লেখার পাঠ্যটি দিয়ে চেষ্টা করেছি optionকিন্তু এটিও কার্যকর হয় না।

কোন ধারনা?

উত্তর:


183

আপনার কোডে কিছু ধারণামূলক সমস্যা রয়েছে:

প্রথম ,

@Html.DropDownListFor(n => n.OrderTemplates, new SelectList(Model.OrderTemplates, "OrderTemplateId", "OrderTemplateName", 1), "Please select an order template")

ড্রপডাউনলিস্টফোর্ড ব্যবহার করার সময়, প্রথম প্যারামিটারটি সেই সম্পত্তি যেখানে আপনি নির্বাচিত মানটি ফর্মটি জমা দেওয়ার পরে সঞ্চিত হয়। সুতরাং, আপনার ক্ষেত্রে, SelectedOrderIdআপনার মডেলের অংশ হিসাবে এটি থাকা উচিত বা এ জাতীয় কিছু ব্যবহার করার জন্য:

@Html.DropDownListFor(n => n.SelectedOrderId, new SelectList(Model.OrderTemplates, "OrderTemplateId", "OrderTemplateName", 1), "Please select an order template")

দ্বিতীয় ,

ভিউব্যাগ ব্যবহার বাদে, এটি ভুল নয় তবে আরও ভাল উপায় রয়েছে (পরিবর্তে ভিউমোডেলে সেই তথ্যটি রাখুন), যখন আপনার ভিউব্যাগ সম্পত্তি, যেখানে আপনি নির্বাচিত তালিকাটি ধরে আছেন সেখানে একটি "সামান্য বাগ" (বা একটি অনির্দিষ্ট আচরণ) রয়েছে is আপনি নির্বাচিত মানটি যেখানে রেখেছেন সেই সম্পত্তিটির একই নাম । এটি এড়ানোর জন্য, আইটেমের তালিকায় থাকা সম্পত্তিটির নামকরণ করার সময় কেবল অন্য নাম ব্যবহার করুন।

এই সমস্যাগুলি এড়াতে এবং আরও ভাল এমভিসি কোড লেখার জন্য আমি যদি আপনি থাকতাম তবে আমি কিছু কোড ব্যবহার করতাম:

ভিউ মডেল:

public class MyViewModel{
   public int SelectedOrderId {get; set;}
   public SelectList OrderTemplates {get; set;}

   // Other properties you need in your view
}

নিয়ামক:

public ActionResult MyAction(){
   var model = new MyViewModel();
   model.OrderTemplates = new SelectList(db.OrderTemplates, "OrderTemplateId", "OrderTemplateName", 1);
   //Other initialization code

   return View(model);
}

আপনার দৃষ্টিতে:

@Html.DropDownListFor(n => n.SelectedOrderId, Model.OrderTemplates, "Please select an order template")

44
আমার দিনটি সংরক্ষণ করা হয়েছে: "... যখন আপনার ভিউব্যাগ সম্পত্তি যেখানে আপনি নির্বাচিত তালিকা রেখেছেন সেখানে একই বাগ রয়েছে যেখানে আপনি নির্বাচিত মানটি রেখেছেন সেই সম্পত্তিটির এটি একই নাম this এড়াতে, সম্পত্তি হোল্ডিংয়ের নামকরণ করার সময় কেবল অন্য নামটি ব্যবহার করুন আইটেমের তালিকা। " ধন্যবাদ!
মাইকেল এ। ভল্জ ওরফে ফ্লিন

4
এই "ছোট্ট বাগ" পরম উন্মাদনা! এই কারণে আমার জীবনের 2 ঘন্টা নষ্ট করেছি। কীভাবে এতটা সুস্পষ্ট কিছু এখনও বিদ্যমান এবং প্যাচ পাবে না?
সেন্ট

4
ফ্লিন, আপনার মন্তব্যটি আসলে একটি উত্তর হওয়া উচিত। আমার ড্রপডাউনলিস্টটি কাজ পেতে আমি ক্রেজি বাস্তবায়নের চেষ্টা করেছি এবং এটিই সহজ সমাধান
ডয়নে হিন্টারল্যাং

4
একটু বাগ আছে ? এটি কোনও ত্রুটি নয়। মডেল বাইন্ডিং কোনও সম্পত্তির মানকে আবদ্ধ করে কাজ করে এবং যখন আপনি OrderTemplatesকোনও ViewBagসম্পত্তি যা টাইপফের সাথে আবদ্ধ করার চেষ্টা করে থাকেন IEnumerabe<SelectListItem>। তবে একটি <select>উপাদান জটিল অবজেক্টগুলির সংগ্রহের সাথে আবদ্ধ হতে পারে না (কেবলমাত্র একটি মান ধরণের)

পবিত্র জঞ্জাল আমি এই দিনটির উত্তর না থাকলে পুরো দিন নষ্ট করতাম। সিরিয়াসলি যে ছোট্ট বাগটি কেন আমাদের ভিউব্যাগে জামিন দেওয়া উচিত
ওয়ার্থি 7

23

আমার পক্ষে এতটা কাজ করা ছিল না:

নিয়ামক:

int selectedId = 1;

ViewBag.ItemsSelect = new SelectList(db.Items, "ItemId", "ItemName",selectedId);

দেখুন:

@Html.DropDownListFor(m => m.ItemId,(SelectList)ViewBag.ItemsSelect)

জিকুয়েরি:

$("document").ready(function () {
    $('#ItemId').val('@Model.ItemId');
});

4
আপনার নিয়ামকের ভুল বন্ধনী রয়েছে: এটিতে একটি খোলার প্রথম বন্ধনী এবং দুটি সমাধি বন্ধনী রয়েছে।
আমোস লং

7

আপনি যখন এই জাতীয় কোনও জিনিসটি পাস করেন:

new SelectList(Model, "Code", "Name", 0)

আপনি বলছেন: উত্স ( Model) এবং কী ( "Code") পাঠ্য ( "Name") এবং নির্বাচিত মান 0। সম্পত্তির 0জন্য আপনার উত্সটিতে সম্ভবত কোনও মান নেই Code, তাই এইচটিএমএল সহায়ক সাহায্যকারীকে নির্বাচিত আসলটি এই নিয়ন্ত্রণে পাস করার জন্য প্রথম উপাদানটি নির্বাচন করবে।


3

আপনি নির্ধারিত হওয়ার আগে নিশ্চিত হয়ে নিন যে আপনি নির্বাচিত মানটি ট্রিম করেছেন।

//মডেল

public class SelectType
{
    public string Text { get; set; }
    public string Value { get; set; }
}

// নিয়ামক

var types = new List<SelectType>();
types.Add(new SelectType() { Value =  0, Text = "Select a Type" });
types.Add(new SelectType() { Value =  1, Text = "Family Trust" });
types.Add(new SelectType() { Value =  2, Text = "Unit Trust"});
ViewBag.PartialTypes = types;

// ভিউ

@Html.DropDownListFor(m => m.PartialType, new SelectList(ViewBag.PartialTypes, "Value", "Text"), new { id = "Type" })

2

ভিউতে কী হবে তা যদি আপনি জানেন তবে আপনি কন্ট্রোলারের কাছ থেকে ডিফল্ট মানটিও সেট করতে পারেন তারপরে এটিকে ভিউ / সিএসটিএমএল ফাইলের মধ্যে সেট আপ করতে পারেন। এইচটিএমএল দিক থেকে ডিফল্ট মান সেট করার দরকার নেই।

কন্ট্রোলার ফাইলে।

commission.TypeofCommission = 1;
return View(commission);

.Cshtml ফাইলে।

@Html.DropDownListFor(row => row.TypeofCommission, new SelectList(Model.commissionTypeModelList, "type", "typeName"), "--Select--")

1

আপনার ক্লাসটি ভুলে যাওয়া উচিত

নির্বাচন করুন

আপনার নিয়ামক এ এটি ব্যবহার করুন :

var customerTypes = new[] 
{ 
    new SelectListItem(){Value = "all", Text= "All"},
    new SelectListItem(){Value = "business", Text= "Business"},
    new SelectListItem(){Value = "private", Text= "Private"},
};

মান নির্বাচন করুন:

var selectedCustomerType = customerTypes.FirstOrDefault(d => d.Value == "private");
if (selectedCustomerType != null)
    selectedCustomerType.Selected = true;

ভিউডাটাতে তালিকা যুক্ত করুন:

ViewBag.CustomerTypes = customerTypes;

আপনার দর্শনে এটি ব্যবহার করুন :

@Html.DropDownList("SectionType", (SelectListItem[])ViewBag.CustomerTypes)

-

আরও তথ্য এখানে: http://www.asp.net/mvc/overview/older-versions/working-with-the-roddownlist-box-and-jquery/ using-the-roddownlist-helper-with-aspnet-mvc- এ


0

কন্ট্রোলার বিভাগ যুক্ত করুন

  ViewBag.Orders= new SelectList(db.Orders, "Id", "business", paramid);

এইচটিএমএল বিভাগটি যুক্ত করুন

   @Html.DropDownList("Orders", null)

একটি সহজ পদ্ধতি


একটি সহজ বিকল্প লেনদেন প্রক্রিয়াজাতকরণ
ইব্রাহিম ওজবুলুক

0

আমার জন্য সাধারণ সমাধান :)

@{
     var selectedCity = Model.Cities.Where(k => k.Id == Model.Addres.CityId).FirstOrDefault();
     if (selectedCity != null)
     { 
         @Html.DropDownListFor(model => model.Addres.CityId, new SelectList(Model.Cities, "Id", "Name", selectedCity.Id), new { @class = "form-control" })
     }
     else
     { 
         @Html.DropDownListFor(model => model.Cities, new SelectList(Model.Cities, "Id", "Name", "1"), new { @class = "form-control" })
     }
}

0

খালি আইটেম, নির্বাচিত আইটেমের সাথে লিনক থেকে ড্রপডাউন (100% কাজ করে)
(দৃ Typ়ভাবে টাইপ করা হয়েছে, ত্রুটির ন্যূনতম হওয়ার সম্ভাবনা রয়েছে) যে কোনও মডেল পরিবর্তনগুলি বাইন্ডিংয়ে প্রতিফলিত হবে

নিয়ামক

public ActionResult ManageSurveyGroup()
    {
        tbl_Survey sur = new tbl_Survey();
        sur.Survey_Est = "3";

        return View(sur);
    }

দেখুন

        @{


    //Step One : Getting all the list
    var CompEstdList = (from ComType in db.tbl_CompEstdt orderby ComType.Comp_EstdYr select ComType).ToList();

    //Step Two  : Adding a no Value item **
    CompEstdList.Insert(0, new eDurar.Models.tbl_CompEstdt { Comp_Estdid = 0, Comp_EstdYr = "--Select Company Type--" });

    //Step Three : Setting selected Value if value is present
    var selListEstd= CompEstdList.Select(s => new SelectListItem { Text = s.Comp_EstdYr, Value = s.Comp_Estdid.ToString() });

        }
        @Html.DropDownListFor(model => model.Survey_Est, selListEstd)
        @Html.ValidationMessageFor(model => model.Survey_Est)

বাঁধাই ডেটা জন্য এই পদ্ধতিও সম্ভব

var selList = CompTypeList.Select(s => new SelectListItem { Text = s.CompTyp_Name, Value = s.CompTyp_Id.ToString(), Selected = s.CompTyp_Id == 3 ? true : false });

var selList = CompTypeList.Select (s => new SelectListItem {Text = s.CompTyp_Name, মান = s.CompTyp_Id.ToString (), নির্বাচিত = s.CompTyp_Id == 3? সত্য: মিথ্যা});

0

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

আমার ভুলটি হ'ল আমি অভিধান থেকে এইভাবে একটি নির্বাচন তালিকা তৈরি করার চেষ্টা করেছি:

//wrong!
@Html.DropDownListFor(m => m.Locality, new SelectList(new Dictionary<string, string>() { { Model.Locality, Model.Locality_text } }, Model.Locality, ...

আমি তখন অফিসিয়াল এমএসডিএন ডকটি খনন করতে গিয়েছিলাম এবং দেখেছি যে DropDownListForঅগত্যা একটি প্রয়োজন হয় না SelectList, বরং একটি IEnumerable<SelectListItem>:

//right
@Html.DropDownListFor(m => m.Locality, new List<SelectListItem>() { new SelectListItem() { Value = Model.Locality, Text = Model.Locality_text, Selected = true } }, Model.Locality, new { @class = "form-control select2ddl" })

আমার ক্ষেত্রে আমি সম্ভবত Model.Localityনির্বাচিত আইটেমটি বাদ দিতে পারি , কারণ এটি ক) একমাত্র আইটেম এবং খ) SelectListItem.Selectedসম্পত্তিটিতে এটি ইতিমধ্যে বলেছে ।

আপনি যদি ভাবছেন তবে ডেটাসোর্সটি একটি এজেএক্স পৃষ্ঠা, যা নির্বাচনী / নির্বাচন 2 নিয়ন্ত্রণ ব্যবহার করে গতিশীলভাবে লোড হয়ে যায়।


0
public byte UserType
public string SelectUserType

আপনার একটি পেতে এবং আলাদা একটি সেট করা দরকার। নির্বাচিত মান আপনি সেট করতে চলেছেন একই আইটেম হতে পারে না।

@Html.DropDownListFor(p => p.SelectUserType, new SelectList(~~UserTypeNames, "Key", "Value",UserType))

আমি আমার তালিকার জন্য এনাম অভিধান ব্যবহার করি, এজন্যই "কী", "মান" জোড় রয়েছে।


0

আমার একই রকম সমস্যা ছিল, আমি ভিউব্যাগ এবং এলিমেন্টের নামটি একইভাবে ব্যবহার করছিলাম। (টাইপ ভুল)


0

এটি সিএসএস সমস্যা। আমি জানি না কেন @ এইচটিএমএল.ড্রপডাউনলিস্টফোর্ডে বুটস্ট্র্যাপ 4 ডুয়েস্ট কাজ করে। অবশ্যই এটি ক্লাস ডিজাইনের সমস্যা। যাইহোক, আপনার ড্রপডাউন ইনপুট বাক্সটিতে সিএসএস প্যাডিং থাকলে: #px, # পিক্স; উপাদান তারপর এটি নিষ্ক্রিয়। আশা করি এটি কার্যকর হবে।

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