ASP.NET MVC2 - примеры связывателей пользовательских моделей - PullRequest
16 голосов
/ 26 февраля 2010

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

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

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

Ответы [ 2 ]

12 голосов
/ 26 февраля 2010

Я не знаю, почему вы думаете, что многое изменилось со времен 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){
    //...
}

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

1 голос
/ 09 февраля 2012

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

...