Вопрос

У меня есть следующие объекты:

public class Category
{
    public virtual int CategoryID { get; set; }

    [Required(ErrorMessage = "Section is required")]
    public virtual Section Section { get; set; }

    [Required(ErrorMessage = "Category Name is required")]
    public virtual string CategoryName { get; set; }
}

public class Section
{
    public virtual int SectionID { get; set; }
    public virtual string SectionName { get; set; }
}

Сейчас в моем представлении «Добавить», у меня есть текстовое поле для входа в раздел, например:

<%= Html.TextBoxFor(m => m.Section.SectionID) %>

Я хотел бы создать пользовательскую модель Binder, чтобы иметь следующую логику:

Если клавиша модели заканчивается идентификатором и имеет значение (значение было вставлено в TextBox), затем установите родительский объект (раздел в этом примере) в раздел. MetsByID (значение введенное) еще установить родительский объект на NULL.

Я бы очень ценил помощь здесь, так как это сбивает меня на некоторое время. Спасибо

Это было полезно?

Решение 2

Используя решение, размещенное Дейвом Тибен, я придумал следующее:

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

        if (bindingContext.ModelType.Namespace.EndsWith("Models.Entities") && value != null && (Utilities.IsInteger(value.AttemptedValue) || value.AttemptedValue == ""))
        {
            if (value.AttemptedValue != "")
                return Section.GetById(Convert.ToInt32(value.AttemptedValue));
            else
                return null;
        }
        else
            return base.BindModel(controllerContext, bindingContext);
    }
}

Это работает красиво, однако он не выбирает правильное значение, когда форма публикуется обратно и с использованием выпадающего списка. Я вижу почему, но до сих пор мои попытки исправить это было напрасно. Я был бы признателен в это еще раз, если бы вы могли помочь.

Другие советы

Я разместил модельный связующий на этот вопрос Это использует ирпозиторию для заполнения внешних ключей, если они присутствуют. Вы можете изменить его, чтобы удовлетворить вашу цель лучше.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top