ASP.NET MVC2 - Примеры привязки пользовательских моделей

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

Моя цель - взять коллекцию пар Checkbox / Textbox, и для всех пар Checked я хотел бы создать пару ключ / значение из значения Checkbox и связанного значения Textbox. После агрегирования этих данных мне нужно выполнить некоторую сериализацию строк в коллекции, чтобы я мог сохранить ее в строковом свойстве желаемого типа модели. Я уже отправляю данные из формы в управляемом формате, который позволит мне связать данный флажок с конкретным текстовым полем, это просто вопрос выяснения, как получить все части там, где они мне нужны.

Кто-нибудь знает о некоторых современных руководствах, которые могут помочь мне начать создание привязки пользовательских моделей?


person Nathan Taylor    schedule 26.02.2010    source источник


Ответы (2)


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

public class CustomModelBinder : DefaultModelBinder {
    public override object BindModel(ControllerContext controllerContext, 
        ModelBindingContext bindingContext) {

        NameValueCollection form = controllerContext.HttpContext.Request.Form;
        //get what you need from the form collection

        //creata your model
        SomeModel myModel = new SomeMode();
        myModel.Property = "value";
        //or add some model errors if you need to
        ModelStateDictionary mState = bindingContext.ModelState;
        mState.Add("Property", new ModelState { });
        mState.AddModelError("Property", "There's an error.");

        return myModel; //return your model
    }
}

И ваше действие:

public ActionResult Contact([ModelBinder(typeof(CustomModelBinder))]SomeModel m){
    //...
}

Это та информация, которую вы ищете?

person Çağdaş Tekin    schedule 26.02.2010
comment
Этот метод полностью работает для меня, но у меня создалось впечатление, что я должен использовать bindingContext.ValueProvider, а не напрямую обращаться к HttpContext (из соображений возможности тестирования). - person Nathan Taylor; 26.02.2010
comment
@ Натан Тейлор, понятно. В этом случае вам может помочь описанная здесь техника. hanselman.com/blog/ С. Хансельман также приводит здесь пример того, как тестировать связующее: stackoverflow.com/questions/253574/ - person Çağdaş Tekin; 26.02.2010
comment
Кроме того, если вы ищете привязку модели на основе определенного (или универсального) типа, проверьте сообщение здесь: stackoverflow.com/questions/1487005/ - person Andrew Dunkman; 27.05.2010

Взгляните на несколько примеров заголовка Пользовательские связывания моделей MVC в моем блоге.

person ulu    schedule 09.02.2012
comment
Веб-сайт не работает, и примеры следует размещать здесь, а не на внешнем сайте. - person Jim Geurts; 05.01.2013