Могу ли я изменить имя html, сгенерированное Html.DropDownListFor?
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>
Есть ли способ изменить его, чтобы он создавал ID из "Status_2", "Status_3" и т.д.
Ответы
Ответ 1
Как @Anar сказал в комментариях;
Собственно, вы можете изменить атрибут имени так же, как id, но вместо "name" используйте "Name". Удивительно, но это работает.
@Html.DropDownListFor(x => Model.AdminSummaries[index].Status,
AdminStatusReference.GetAdminStatusOptions(),
new { id = string.Format("Status_{0}",index ), Name = "GiveName" });
Ответ 2
Иногда хелперы HTML не помогают. DropDownListFor кодирования может быстро усложниться, и, в конце концов, он просто отображает 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>
Ответ 3
Вы можете установить/изменить идентификатор так же, как любой атрибут HTML (но не имя, которое я нашел).
@Html.DropDownListFor(x => Model.AdminSummaries[index].Status, AdminStatusReference.GetAdminStatusOptions(), new { id = string.Format("Status_{0}",index ) });
Ответ 4
Для тех, кто задается вопросом, почему это не работает, все дело чувствительно к регистру, и ему нужно @перед ним...
так, это работает:
new { @id = "myID", @Name = "myName", @Value = "myValue", @class = "form-control", @onchange = "javascript:DoSomething(this.value);" }
И это не так (помните строчный "n" в @name
)
new { @id = "myID", @Name = "myName", @Value = "myValue", @class = "form-control", @onchange = "javascript:DoSomething(this.value);" }
Ответ 5
Идентификатор может быть изменен, как описано в @Arbiter. Однако, если вы хотите изменить имя, я думаю, вам нужно использовать @Html.DropDownList
, а не @Html.DropDownListFor
. Это лишает вас каких-либо преимуществ наличия сильной типизации для элемента property, но поскольку только изменение идентификаторов означает, что вы не можете получить доступ к значениям значимым образом, если смотреть на ответ Request.Form
, это может быть приемлемым обходным путем для вас.
Ответ 6
Просто используйте "Имя" вместо "name", и оно работает.
@Html.DropDownList("ClassID", null, "Select Class", htmlAttributes: new { id = _id, Name =_id, @class = "form-control" })
Ответ 7
Спасибо.. это работает... добавление .Name изменить имя атрибута пароля html
@Html.PasswordFor(Function(model) model.password, New With {.Autocomplete = "off", .Name = "oldpassword", .id = "oldpassword", .value = Model.password, .readonly = True})
Ответ 8
Моим решением этой проблемы является замена имени и имени после DropDownListFor() с помощью метода расширения html-помощника.
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");
Ответ 9
Вам нужно изменить С DropDownListFor на DropDownList. Чем вы можете легко изменить имя.
@Html.DropDownList("YourName", SelectList, new { @id = "YourId", @class = "YourClass" })
Надеюсь, это сработает.