![](/img/trans.png)
[英]MVC / HTML.DropDownListFor / making default option and its value
[英]mvc3 Html.DropDownListFor - dynamically create “value” attribute in <option>
我正在尝试使用HTML.DropDownListFor动态生成标记的“值”属性,但是遇到了问题。 我正在考虑仅对for循环进行硬编码并插入原始HTML,但我肯定有一种更简单的方法可以做到这一点(?)
我有一个视图模型:
public class DSDCustomerViewModel
{
public IEnumerable<dsd_l_chain> chainBuild { get; set; }
public string Id_dsd { get; set; }
public string Owner { get; set; }
public IEnumerable<string> WFCategory { get; set; }
public IEnumerable<string> TransactionType { get; set; }
[etc etc etc]
chainBuild属性来自我的数据库(使用EF),该数据库使用扩展方法填充视图,如下所示:
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<table>
<tbody>
[etc etc]
<td colspan="1" rowspan="1">
Chain Name
</td>
<td colspan="1" style="vertical-align: top;">
@Html.DropDownListFor(model => model.cc_chainName, new SelectList(Model.cc_chainName), "Select ...")
</td>
<td rowspan="1" colspan="2" style="vertical-align: top;">
@Html.ValidationMessageFor(model => model.cc_chainName)
</td>
[etc etc]
cc_chainName EF对象具有“ Chain_Desc”,“ Chain”,“ Chain_Group”和“ ID”等属性。
生成的HTML如下:
<select id="cc_chainName" name="cc_chainName"><option value="">Select ...</option>
<option>1ST STOP</option>
<option>3 RIVERS ICE CREAM SPCLTS</option>
<option>3RIVERS SALES TO NON-NAP CUSTS</option>
我该如何修改:
@Html.DropDownListFor(model => model.cc_chainName, new SelectList(Model.cc_chainName), "Select ...")
...,以便生成的HTML代码将标记的“值”属性设置为cc_chainName.ID? 这样生成的HTML将如下所示:
<select id="cc_chainName" name="cc_chainName"><option value="">Select ...</option>
<option value="1">1ST STOP</option>
<option value="2">3 RIVERS ICE CREAM SPCLTS</option>
<option value="3">3RIVERS SALES TO NON-NAP CUSTS</option>
请注意,“值”标记包含来自cc_chainName模型的ID
谢谢!
每个SelectList
在构造函数中都带有dataValueField
和dataTextField
属性:
@Html.DropDownListFor(model => model.cc_chainName,
new SelectList(Model.cc_chainName,
"ID", "TextualPropertyNameHere"), "Select ...")
// ^^ id property and text property here
您没有提供文本属性名称。.因此,以上假设的模型与此类似:
class cc_chainName {
public int ID { get; set; }
public string TextualPropertyNameHere { get; set; }
}
编辑:
回应您的评论。
考虑以下模型:
public class Product {
public int Id { get; set; }
public string ProductName { get; set; }
}
将其设置为视图中的枚举:
@model IEnumerable<YourApplication.Models.Product>
..使用此Controller动作:
var products = new List<Product>()
{
new Product() { Id = 1, ProductName = "Lollies" },
new Product() { Id = 2, ProductName = "Beer" },
new Product() { Id = 3, ProductName = "Funny Hat" }
};
return View(products);
此DropDownList
(注意,属性名称是SelectList
中的字符串):
@Html.DropDownList("myDropDown", new SelectList(Model, "Id", "ProductName"), "-- Select item --")
产生以下标记:
<select id="myDropDown" name="myDropDown">
<option value="">-- Select item --</option>
<option value="1">Lollies</option>
<option value="2">Beer</option>
<option value="3">Funny Hat</option>
</select>
要获得所需的内容,可以在两个字符串中显式传递“ ProductName”。
@Html.DropDownList("myDropDown", new SelectList(Model, "ProductName", "ProductName"), "-- Select item --")
产生:
<select id="myDropDown" name="myDropDown">
<option value="">-- Select item --</option>
<option value="Lollies">Lollies</option>
<option value="Beer">Beer</option>
<option value="Funny Hat">Funny Hat</option>
</select>
如何考虑不同的期权要素? 我有一个DropDownList,其中有一些来自数据库的重复元素。 我似乎只能得到值属性或不同的元素。
这是我的代码:
@Html.DropDownList("ResidentialBuilding", new SelectList(Model.Select(x => x.type).Distinct()))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.