[c#] ASP.NET MVC 3 : TextBoxFor로 “name”특성 재정의

을 사용 Html.TextBoxFor하여 이름 속성을 재정의하는 것이 가능 합니까?

나는 성공하지 못했습니다. 클라이언트 측 유효성 검사가 작동하려면 TextBoxFor를 사용해야하지만, 텍스트 상자의 이름이 생성 된 것과 달라야하는 이유는 없습니다.

나는 다음을 시도했다 :

@Html.TextBoxFor(x => x.Data, new { name = Model.Key + "_Data", id = Model.Key + "_Data" })

ID에는 작동하지만 이름은 작동하지 않습니다. 이게 가능해?

업데이트 : TextBoxFor의 코드를 살펴 봅니다. 쉬운 방법이없는 것 같습니다. 누군가가 나를 잘못 증명할 수 있기를 바랍니다.



답변

Rob, 실제로 훨씬 더 간단한 방법이 있습니다. name 대신 Name을 사용 하십시오 .

@Html.TextBoxFor(x => x.Data, new { Name = Model.Key + "_Data", id = Model.Key + "_Data" })


답변

이름에 접두사를 적용하기 위해 이것을 묻는 것입니까? 그렇다면 ViewData.TemplateInfo.HtmlFieldPrefix컨트롤러에서 설정 하여 이를 수행 할 수 있습니다 .

나는 Brad Wilson의 블로그 에서 이것에 대해 많은 것을 배웠습니다 .


답변

EditorFor에는 name속성을 매개 변수로 제공 할 수있는 오버로드가 있습니다 .

 @Html.EditorFor(expression, null, name)


답변

시도 EditorFor을 . 속성 유형이 문자열이 아닌 경우에도 텍스트 상자가 렌더링되도록하려면 문자열을 템플릿 이름으로 전달할 수 있습니다. 속성이 이미 문자열 인 경우 templatename텍스트 상자를 렌더링하는 데 명시 적으로 필요하지 않으므로 null. id 매개 변수가 명시 적으로 필요하지 않으며 요소 이름에서 유추됩니다. 그리고 모든 유효성 검사는 EditorFor에서 여전히 활성화되어 있습니다.

 @Html.EditorFor(x => x.Data, "string", Model.Key + "_Data")


답변

ben의 대답은 Html.Raw로 포장해야한다는 점을 제외하고는 내가 찾던 것을 얻었습니다.

@Html.Raw(Html.TextBoxFor(x => x.Data).ToString().Replace("Data", "NewData"))


답변

전화 Microsoft GOTCHA입니다

이름을 대문자로 사용하십시오.

@Html.TextBoxFor(m => m.Reply.Answer, new {@Name="Whatyouwant"})


답변

약간 “unpretty”=), 시도해보십시오 :

@Html.TextBoxFor(x => x.Data).ToString().Replace("Data", "NewData")