asp.net-mvc - 강좌 - asp.net mvc 패턴




Html.DropDownListFor에 의해 생성 된 HTML 이름을 변경할 수 있습니까? (6)

"이름"대신 "이름"을 사용하면됩니다.

@Html.DropDownList("ClassID", null, "Select Class", htmlAttributes: new { id = _id, Name =_id, @class = "form-control" })

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 를 생성하도록 변경할 수있는 방법이 있습니까?


@Anar가 의견에서 말했다;

실제로 name 속성을 id와 같은 방식으로 변경할 수 있지만 "name"대신 "Name"을 사용하십시오. 놀랍게도 그것은 작동합니다.

 @Html.DropDownListFor(x => Model.AdminSummaries[index].Status, 
AdminStatusReference.GetAdminStatusOptions(), 
new { id = string.Format("Status_{0}",index ), Name = "GiveName" });

ID는 @Arbiter에서 설명한대로 변경할 수 있습니다. 그러나 이름을 변경하려면 @Html.DropDownList 대신 @Html.DropDownList 를 사용해야한다고 생각합니다. 이것은 당신에게 속성 요소에 대한 강력한 타이핑을하는 것의 이점을 잃어 버리지 만 ID를 변경하는 것은 Request.Form 응답을 볼 때 의미있는 방법으로 값에 액세스 할 수 없다는 것을 의미합니다.


고마워 .. 그것은 작동합니다 ... 추가 .Name은 html 암호 속성의 이름을 변경합니다.

      @Html.PasswordFor(Function(model) model.password, New With {.Autocomplete = "off", .Name = "oldpassword", .id = "oldpassword", .value = Model.password, .readonly = True})

왜 이것이 작동하지 않는지 궁금해하는 사람들을 위해 모든 것은 대소 문자를 구별하며 그 앞에 @가 필요합니다 ...

그래서,이 작품 :

new { @id = "myID", @Name = "myName", @Value = "myValue", @class = "form-control", @onchange = "javascript:DoSomething(this.value);" }

그리고 이것은 ( @name 에서 소문자 'n'을 생각하지 않습니다)

new { @id = "myID", @name = "myName", @Value = "myValue", @class = "form-control", @onchange = "javascript:DoSomething(this.value);" }

이 문제에 대한 나의 해결책은 DropDownListFor () 다음에있는 id와 name을 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");




asp.net-mvc-3