سؤال

لدي فئة مخصصة:

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>

وعندما أتعرض للتصفح إلى الصفحة، انتهى بي الأمر برسالة الخطأ: يمكن استخدام القوالب فقط مع تعبيرات الملحق بالميدان والخاصية. بعد قليل من googling، أحضرت أن هذا يحدث لأن وظائف Editorfor و 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