سؤال

لقد قمت بإنشاء موثق طراز مخصص الخاص بي للتعامل مع القسم المنسدلة المحددة في رأيي على النحو التالي:

Html.DropDownListFor(m => m.Category.Section, new SelectList(Model.Sections, "SectionID", "SectionName"), "-- Please Select --")

وهنا هو موثق النموذج الخاص بي:

public class SectionModelBinder : DefaultModelBinder 
{ 
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
        var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); 

        if (bindingContext.ModelType.IsAssignableFrom(typeof(Section)) && value != null) 
        { 
            if (Utilities.IsInteger(value.AttemptedValue)) 
                return Section.GetById(Convert.ToInt32(value.AttemptedValue)); 
            else if (value.AttemptedValue == "")
                return null; 
        } 

        return base.BindModel(controllerContext, bindingContext); 
    } 
}

الآن داخل وحدة التحكم الخاصة بي أستطيع أن أقول:

[HttpPost]
public ActionResult Create(FormCollection collection)
{
    var category = new Category();

    if (!TryUpdateModel(category, "Category")
        return View(new CategoryForm(category, _sectionRepository().GetAll()));

    ...
}

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

أقدر ذلك إذا كان بإمكان شخص ما أن يريني كيفية القيام بذلك. شكرًا

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

المحلول

تم حل المشكلة بالقول:

Html.DropDownListFor(m => m.Category.Section, new SelectList(Model.Sections.Select(s => new { Text = s.SectionName, Value = s.SectionID.ToString() }), "Value", "Text"), "-- Please Select --") 

يبدو أن القضية حل حول المقطع الصحيح. عندما تقوم بتحويلها إلى سلسلة يعمل كل شيء بشكل جيد. أتمنى أن يساعدك هذا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top