ienumerable 와 함께 html.editorfor 사용
-
16-09-2019 - |
문제
커스텀 클래스가 있습니다.
public class Person
{
public String Name { get; set; }
public Int32 Age { get; set; }
public List<String> FavoriteFoods { get; set; }
public Person()
{
this.FavoriteFoods = new List<String>();
this.FavoriteFoods.Add("Jambalya");
}
}
이 수업을 강하게 입력 한 견해로 전달합니다.
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcLearner.Models.Person>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Create
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Create</h2>
<% using (Html.BeginForm()) { %>
<%= Html.LabelFor(person => person.Name) %><br />
<%= Html.EditorFor(person => person.Name) %><br />
<%= Html.LabelFor(person => person.Age) %><br />
<%= Html.EditorFor(person => person.Age) %><br />
<%= Html.LabelFor(person => person.FavoriteFoods[0]) %><br />
<%= Html.EditorFor(person => person.FavoriteFoods[0]) %>
<% } %>
</asp:Content>
그리고 페이지를 탐색하면 오류 메시지가 끝납니다. 템플릿은 필드 및 속성 액세서 표현식과 함께 만 사용할 수 있습니다. 약간의 인터넷 검색 후에, 나는 편집기와 labelfor 함수가 모델 객체의 즉각적인 속성 만 받아 들일 수 있기 때문에 이것이 발생한다는 것을 알아 냈으며, 좋아하는 음식 [0]은 즉각적인 속성이 아닙니다. 컨트롤 이름을 지정하기 위해 문자열을 사용하지 않고 코드가 작동하는 작업이 있습니까? 그게 가능합니까? 최적으로 모델에서 편집기가 필요한 항목으로 표현식을 사용하고 싶습니다.이 항목은 입력 제어 이름을 자체적으로 결정합니다.
더 많은 것을 시도하면서 다음과 같은 변경 사항을 사용 하여이 작업을 수행 할 수있었습니다.
<% using (Html.BeginForm()) { %>
<%= Html.LabelFor(person => person.Name) %><br />
<%= Html.EditorFor(person => person.Name) %><br />
<%= Html.LabelFor(person => person.Age) %><br />
<%= Html.EditorFor(person => person.Age) %><br />
<% foreach (String FavoriteFoods in Model.FavoriteFoods) { %>
<%= Html.LabelFor(food => FavoriteFoods) %><br />
<%= Html.EditorFor(food => FavoriteFoods)%><br />
<% } %>
<input type="submit" value="Submit" />
<% } %>
그러나 Editorfor 및 Labelfor의 표현식의 오른쪽은 채우려고하는 목록의 정확한 이름이어야하며 목록은 기본 유형 (예 : 문자열, int32 등)이어야합니다. 그러나 복잡한 유형을 사용하려고 할 때 여전히 실패합니다. 나는 각 속성에 대한 입력이있는이 사람 클래스 목록을 표시하려고 시도했으며 모든 것을 브라우저에 잘 표시하지만 널 목록을 내 게시물 조치로 반환합니다. 목록 항목에 대한 입력 이름으로 인덱스가 표시되도록하려면 어떻게해야합니까?
해결책
나는 이것이 좋아하는 음식 목록을위한 것이라고 가정합니다. ASP.NET MVC V1에서 수행 된 방법은 다음과 같은 것을 가지고있었습니다.
<input type="hidden" name="FavouriteFoods.Index" value="0" />