سؤال

يتعلق هذا السؤال ب ASP.NET MVC 2 RC (ديسمبر ديسمبر). المشكلة الأساسية هي أنه عند إنشاء قائمة منسدلة ذات قيمة محددة افتراضية، فإن السمة "المحددة" إما لا يتم تقديمها إلى HTML أو يعزى إلى الخيار الخطأ.

إليك بعض التعليمات البرمجية لإظهار مشكلة الخيار الخطأ:

إليك دالة لتوليد بعض القيم [فئة Attriboleservice]:

public static Dictionary<int, string> MonthOfBirth
    {
        get
        {
            Dictionary<int, string> months = new Dictionary<int, string>();
            for (int i = 0; i <= 11; i++)
            {
                months.Add(i, CultureInfo.CurrentUICulture.DateTimeFormat.MonthNames[i]);
            }
            return months;
        }
    }

إليك مساعد تمديد لإنشاء قائمة من Selectristitems:

public static List<SelectListItem> ToSelectList<T>(
        this IEnumerable<T> enumerable,
        Func<T, string> text,
        Func<T, int> value,
        string defaultOption
        )
    {
        var items = enumerable.Select(x => new SelectListItem
        {
            Text = text(x),
            Value = value(x).ToString(),
            Selected = false
        }).ToList();

        items.Insert(0, new SelectListItem
        {
            Text = defaultOption,
            Value = "-1",
            Selected = true
        });

        return items;
    }

هذا يربط المقتطفين أعلاه:

 public List<SelectListItem> MonthOfBirthList
    {
        get
        {
            return AttributeService.MonthOfBirth.OrderBy(x => x.Key).ToSelectList(x => x.Value, x => x.Key,
                                                 "Month");
        }
    }

أول اثنين من المقتطفين يقيمون في فصول مختلفة والحياة الثالثة في رأيي التي تحكم المراقب مباشرة إلى الرأي. لذلك في رأيي ثم لدي:

<%=Html.DropDownListFor(x=>x.MonthOfBirth, Model.MonthOfBirthList, new { @class = "panel_4_month" })%>

لاحظ أن طريقة التمديد الخاصة بي تضيف إلى قائمة SelectedItEM افتراضية في فهرس الموضع 0، مع قيمة افتراضية وتحديدها = TRUE. عندما أضع نقطة انقطاع حول وحدة التحكم لمعرفة ما يحتوي النموذج الذي يحتوي على القائمة بشكل صحيح ويتم تعيين الخيار الصحيح على المحدد.

HTML الذي أحصل عليه في الواقع هو هذا:

<select class="panel_4_month" id="MonthOfBirth" name="MonthOfBirth">
  <option value="-1">Month</option>
  <option selected="selected" value="0">January</option>
  <option value="1">February</option>
  <option value="2">March</option>
  etc...
</select>

السؤال الأساسي إذن هو ما إذا كان الرمز الخاص بي خطأ أو ما إذا كان هناك خطأ في عارض HTML؟ أنا سعيد لتحميل محلول VS28K مع نموذج التعليمات البرمجية في مكان ما إذا كانت هذه ليست معلومات كافية. شكرا.

هل كانت مفيدة؟

المحلول

لا أستطيع رؤية طريقة وحدة التحكم الخاصة بك، لكنني أعتقد أن المشكلة موجودة. إذا قمت بتعيين ما يلي في وحدة التحكم الخاصة بك، يجب أن تشاهد الشهر المحدد.

public ActionResult Edit(string id)
{
  User myModel = UserServiceFactory.GetUser(id);
  myModel.MonthOfBirth = -1;
  return View(myModel);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top