문제

커스텀 클래스가 있습니다.

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" />
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top