Что я делаю не так, пытаясь создать модель связующего? - PullRequest
0 голосов
/ 25 мая 2011

У меня есть эта модель:

public class QuestionSimple
    {
        public string Body { get; set; }
        public bool IsSingleChoice { get; set; }
        public List<String> Answers { get; set; }
        public string Difficutly { get; set; }
        public string Explanation { get; set; }

    }  

Который я пытаюсь связать, используя эту строку в Global.asax.cs

ModelBinders.Binders.Add(typeof(QuestionSimple), new AddQuestionSimpleBinder());  

... с этим связующим веществом

public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
        {
            // Get the raw attempted value from the value provider    
            string key = bindingContext.ModelName;
            ValueProviderResult val = bindingContext.ValueProvider.GetValue(key);  
            //val is ALWAYS NULL
            return null;
        }  

Но val всегда нулевой.
Вот представление, которое должно возвращать (и фактически возвращает) список ответов, когда я не использую мое связующее.

 @using (Html.BeginForm("AddQuestionSimple", "Topic", FormMethod.Post, new { @id = "mainForm" }))
    {    
        <input type="text" name="questionToBeAdded.Answers[0]" value="ff" />
        <input type="text" name="questionToBeAdded.Answers[1]" value="ddds" />
        <input type="text" name="questionToBeAdded.Answers[2]" value="ff" />
        <input type="text" name="questionToBeAdded.Answers[3]" value="ddds" />
        <input type="text" name="questionToBeAdded.Answers[4]" value="ff" />
        <input type="text" name="questionToBeAdded.Answers[5]" value="ddds" /> 
        <input value="Add question" type="submit" style="position: static; width: 10em; height: 3em;
            font-size: 1em;" />
    }   

Связыватель модели по умолчанию получает мои значения, когда я их публикую, но мой val всегда равен null.
Почему это так?
(следует упомянуть, что это попытка решить эту большую проблему).

Редактировать 1:
Вот предполагаемое связанное действие

   [HttpPost]
   public ActionResult AddQuestionSimple(PMP.WebUI.Models.UserInteractionEntities.UserInput.QuestionSimple questionToBeAdded)
    {
        return View("AddQuestion");
    }

Спасибо.

1 Ответ

0 голосов
/ 25 мая 2011

Во-первых, вам нужно переопределить BindModel, чтобы ваш метод начинался с:

public override object BindModel

Далее, вы не найдете значение с ключом "questionToBeAdded" в вашем bindingContext.ValueProviders. Отладьте и посмотрите на эту коллекцию. BindingContext.ValueProviders [1] имеет FormValueProvider, который содержит все свойства вашей модели. То, как вы это делаете, возможно, вам придется повторить это вручную. Другой способ сделать это - просто переопределить метод BindProperty, просто наберите:

protected override void BindProperty

В классе связывателя модели вы получите заполненную сигнатуру метода (при условии, что вы наследуете от DefaultModelBinder). В этом методе вы получите более подробную информацию о каждом свойстве, трубопровод сделан для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...