如何设置Html.DropDownListFor的选定值?我一直在网上看看,已经看到它可以通过使用第四个参数来实现,如下所示:
@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")
1
是我想要选择的option
的ID,我也尝试使用option
的文字,但这也不起作用。
有什么想法吗?
答案 0 :(得分:160)
您的代码存在一些概念性问题:
<强>第一强>,
@Html.DropDownListFor(n => n.OrderTemplates, new SelectList(Model.OrderTemplates, "OrderTemplateId", "OrderTemplateName", 1), "Please select an order template")
使用DropDownListFor时,第一个参数是提交表单后存储所选值的属性。因此,在您的情况下,您应该将SelectedOrderId
作为模型的一部分或类似的东西,以便以这种方式使用它:
@Html.DropDownListFor(n => n.SelectedOrderId, new SelectList(Model.OrderTemplates, "OrderTemplateId", "OrderTemplateName", 1), "Please select an order template")
<强>第二强>,
除了使用ViewBag之外,这没有错,但有更好的方法(将信息放在ViewModel中), 当您的ViewBag属性存在“小错误”(或未预料到的行为)时如果您持有SelectList,则与您放置 所选值的属性的名称相同。要避免这种情况,请在命名包含项目列表的属性时使用其他名称。
如果我是你,我会使用一些代码来避免这些问题,并编写更好的MVC代码:
<强>视图模型:强>
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")
答案 1 :(得分:19)
对我来说,没有工作,所以这样工作:
控制器:
int selectedId = 1;
ViewBag.ItemsSelect = new SelectList(db.Items, "ItemId", "ItemName",selectedId);
查看:
@Html.DropDownListFor(m => m.ItemId,(SelectList)ViewBag.ItemsSelect)
JQuery的:
$("document").ready(function () {
$('#ItemId').val('@Model.ItemId');
});
答案 2 :(得分:6)
传递这样的对象时:
new SelectList(Model, "Code", "Name", 0)
您说的是来源(Model
)和密钥("Code"
)文本("Name"
)和所选值0
。可能你的0
属性的源没有Code
值,因此,html帮助器将选择第一个元素。要将实际的selectedValue传递给此控件。
答案 3 :(得分: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" })
答案 4 :(得分:2)
如果您知道视图中的内容,您也可以从Controller设置默认值,而不是将其设置到view / cshtml文件中。 无需从HTML端设置默认值。
在Controller文件中。
commission.TypeofCommission = 1;
return View(commission);
在.cshtml文件中。
@Html.DropDownListFor(row => row.TypeofCommission, new SelectList(Model.commissionTypeModelList, "type", "typeName"), "--Select--")
答案 5 :(得分:0)
你应该忘记课程
的SelectList
在控制器
中使用此功能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;
将列表添加到ViewData:
ViewBag.CustomerTypes = customerTypes;
在查看
中使用此功能@Html.DropDownList("SectionType", (SelectListItem[])ViewBag.CustomerTypes)
-
答案 6 :(得分:0)
添加控制器部分
ViewBag.Orders= new SelectList(db.Orders, "Id", "business", paramid);
添加Html部分
@Html.DropDownList("Orders", null)
一种简单的方法
答案 7 :(得分: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" })
}
}
答案 8 :(得分:0)
Linq to Dropdown with empty item,selected item(100%工作)
(强类型,最小错误的机会)任何模型更改都将反映在绑定
控制器
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 });
答案 9 :(得分:0)
我知道这不是问题的真正答案,但是当我不停地绊倒这篇文章时,我正在寻找一种方法来动态地从列表中初始化DropDownList。
我的错误是我试图从字典中创建一个SelectList:
public MvxCommand<string> SearchContactsCommand => new MvxCommand<string>(SearchContacts);
private void SearchContacts(string searchTerm)
{
// Do search
}
然后我开始挖掘官方msdn doc,发现 <android.support.design.widget.TextInputLayout
android:layout_marginTop="3dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
local:MvxLang="Hint SearchPlaceholder"
local:MvxBind="TextChanged SearchContactsCommand" />
</android.support.design.widget.TextInputLayout>
并不一定需要//wrong!
@Html.DropDownListFor(m => m.Locality, new SelectList(new Dictionary<string, string>() { { Model.Locality, Model.Locality_text } }, Model.Locality, ...
,而是DropDownListFor
:
SelectList
在我的情况下,我可能也会将IEnumerable<SelectListItem>
省略为所选项目,因为它是a)唯一的项目,b)它已经在//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" })
属性中说明了它。
万一你想知道,数据源是一个AJAX页面,可以使用SelectWoo / Select2控件动态加载。
答案 10 :(得分:0)
public byte UserType
public string SelectUserType
你需要得到一个并设置不同的一个。选定的值不能与您要设置的项目相同。
@Html.DropDownListFor(p => p.SelectUserType, new SelectList(~~UserTypeNames, "Key", "Value",UserType))
我使用Enum字典作为我的列表,这就是为什么有“key”,“value”对。
答案 11 :(得分:0)
我有一个类似的问题,我使用的是ViewBag和Element名称相同。 (输入错误)
答案 12 :(得分:0)
这是CSS问题。我不知道Bootstrap 4中的@ Html.DropDownListFor为什么不起作用。当然这是类设计问题。无论如何,如果您的下拉列表输入框具有CSS填充,则工作范围是:#px,#px;元素,然后将其禁用。希望这会起作用。