Подтвердить что ты не робот

Могу ли я изменить имя 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" и т.д.

4b9b3361

Ответ 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" })

Надеюсь, это сработает.