16

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

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

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

ответ

12

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

Было ли это вид информации, которую вы ищете?

+2

Этот метод полностью работает для меня, но я был под впечатлением, что я должен использовать 'bindingContext.ValueProvider', а не напрямую обращаться к HttpContext (для целей проверки). –

+0

@ Натан Тейлор, я вижу. В этом случае описанная здесь техника может помочь вам начать работу. http://www.hanselman.com/blog/SplittingDateTimeUnitTestingASPNETMVCCustomModelBinders.aspx S. Hanselman также дает пример здесь о том, как проверить связующее: http://stackoverflow.com/questions/253574/how-to-test-custom -model-binders-in-asp-net-mvc/589250 # 589250 –

+0

Кроме того, если вы ищете привязку модели, основанной на конкретном (или общем) типе, проверьте сообщение здесь: http://stackoverflow.com/questions/1487005/asp-net-mvc-model-binder-for-generic-type –

1

Взгляните на несколько примеров Custom MVC Model binders в моем блоге.

+1

Веб-сайт опущен, и примеры должны быть опубликованы здесь - не внешний сайт. –

 Смежные вопросы

  • Нет связанных вопросов^_^