IDI正在使用以下代码创建下拉列表:
@for (var index = 0; index < Model.AdminSummaries.Count(); index++)
{
<div class="rep_tr0">
<div class="rep_td0">
@Html.DropDownListFor(x => Model.AdminSummaries[index].Status, AdminStatusReference.GetAdminStatusOptions())
</div>
代码创建以下内容:
<select id="AdminSummaries_2__Status" name="AdminSummaries[2].Status">
<option value="1">Released</option>
<option value="2">Review</option>
<option value="3">New</option>
</select>
<select id="AdminSummaries_3__Status" name="AdminSummaries[3].Status">
<option value="1">Released</option>
<option value="2">Review</option>
<option value="3">New</option>
</select>
我有什么方法可以更改它,以便创建“Status_2”,“Status_3”等 ID 。
答案 0 :(得分:73)
就像@Anar在评论中说的那样;
实际上,您可以使用与id相同的方式更改name属性,但使用“Name”代替“name”。令人惊讶的是它有效。
@Html.DropDownListFor(x => Model.AdminSummaries[index].Status,
AdminStatusReference.GetAdminStatusOptions(),
new { id = string.Format("Status_{0}",index ), Name = "GiveName" });
答案 1 :(得分:9)
有时,HTML助手无法提供帮助。 DropDownListForFor编码可以快速复杂化,最后它只是渲染HTML所以有时候去老学更好
<select name="myname" class="dropdownlist" id="myid">
@foreach (SelectListItem item in Model.SomeSelectList) {
if (item.Value == Model.theValue) {
<option value="@(item.Value)" selected="selected">@item.Text</option>
} else {
<option value="@(item.Value)">@item.Text</option>
}
}
</select>
答案 2 :(得分:5)
您可以像设置任何HTML属性一样设置/更改ID(但不是我找到的名称)。
@Html.DropDownListFor(x => Model.AdminSummaries[index].Status, AdminStatusReference.GetAdminStatusOptions(), new { id = string.Format("Status_{0}",index ) });
答案 3 :(得分:5)
对于那些想知道为什么不起作用的人来说,整个事情都是区分大小写的,需要在它前面有一个@ ...
所以,这有效:
new { @id = "myID", @Name = "myName", @Value = "myValue", @class = "form-control", @onchange = "javascript:DoSomething(this.value);" }
这并不是(请注意@name
中的小写&#39; n&#39;)
new { @id = "myID", @name = "myName", @Value = "myValue", @class = "form-control", @onchange = "javascript:DoSomething(this.value);" }
答案 4 :(得分:2)
可以按照@Arbiter的描述更改ID。但是,如果您想更改名称,那么我认为您需要使用@Html.DropDownList
而不是@Html.DropDownListFor
。这对于使用属性元素进行强类型操作会带来任何好处,但只是更改ID意味着如果查看Request.Form
响应,您无法以有意义的方式访问值,这可能是一种可接受的解决方法你。
答案 5 :(得分:2)
只需使用&#34;姓名&#34;而不是&#34; name&#34;它有效。
@Html.DropDownList("ClassID", null, "Select Class", htmlAttributes: new { id = _id, Name =_id, @class = "form-control" })
答案 6 :(得分:1)
谢谢..它的工作......添加.Name更改html密码属性的名称
@Html.PasswordFor(Function(model) model.password, New With {.Autocomplete = "off", .Name = "oldpassword", .id = "oldpassword", .value = Model.password, .readonly = True})
答案 7 :(得分:1)
您需要将DropDownListFor更改为DropDownList。比起您可以轻松更改名称。
@Html.DropDownList("YourName", SelectList, new { @id = "YourId", @class = "YourClass" })
希望它会起作用。
答案 8 :(得分:0)
我对此问题的解决方案是使用html帮助扩展方法替换DropDownListFor()之后的id和名称。
public static MvcHtmlString ReplaceIdAndName(this MvcHtmlString htmlSource, string name)
{
MvcHtmlString result;
if (name == null)
result = htmlSource;
else
{
string id = name.Replace("[", "_").Replace("]", "_").Replace(".", "_"); // HTML ids cannot have []. so MVC convention replaces with _
XDocument html = XDocument.Parse(htmlSource.ToHtmlString());
html.Elements().Select(e => e.Attribute("id")).FirstOrDefault().SetValue(id);
html.Elements().Select(e => e.Attribute("name")).FirstOrDefault().SetValue(name);
result = MvcHtmlString.Create(html.ToString());
}
return result;
}
DropDownListFor(...).ReplaceIdAndName("myclass[1].myprop");