Комплекс ViewModel является нулевым в форме сообщения - PullRequest
0 голосов
/ 19 декабря 2018

У меня проблема с системами, которые я разрабатываю с использованием сложного ViewModel для создания вопросника.Когда форма отправлена, возвращаемая ViewModel имеет значение null.

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

Есть мысли?

Спасибо, Саймон

Модель представления выглядит так:

public class SurveysViewModel
{
    public Survey SurveyDetails { get; set; }
    [AdditionalMetadata("HideLabel", true)]
    public List<QuestionSet> SurveyQuestions { get; set; }
}

классы внутри них выглядят так:

public class Survey
{
    public int Id { get; set; }
    public string SurveyName { get; set; }
    public int IntroId { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
    public bool Active { get; set; }
    public string IntroName { get; set; }
    public string Intro { get; set; }
    public string Conclusion { get; set; }
}

public class QuestionSet
{
    public int? SubQuestionOf { get; set; }
    public int Order { get; set; }
    public bool RepeatPerUser { get; set; }
    public int Id { get; set; }
    public string QuestionText { get; set; }
    public string Q_Text { get; set; }
    public string SubText { get; set; }
    public string TableTitle { get; set; }
    public List<Answer> Answers { get; set; }
    public string Format { get; set; }
    public string OptionsGroup { get; set; }
    public string DBViewName { get; set; }
    public string Header { get; set; }
    public int? Minimum { get; set; }
    public int? Maximum { get; set; }
    public int? Interval { get; set; }
    public int SelectedOption { get; set; }
    public bool Selected { get; set; }
}

Метод Post в контроллере выглядит следующим образом:

    [HttpPost]
    [ValidateAntiForgeryToken]
    [ActionName("CompleteSurvey")]
    public ActionResult CompleteSurvey_Post(SurveysViewModel vm)
    {
        if (ModelState.IsValid)
        {
          //Do something in here
        }
    }

Но ViewModel (vm) показывает две части как нулевые.

Я должен добавить, что вопросы в наборе вопросов бывают различных типов (например, выпадающие списки или входные данные диапазона), которые наследуются от QuestionSet, например:

public class QuestionSet_DropDown : QuestionSet
{
    public QuestionSet_DropDown(QuestionSet question)
    {
        Header = question.Header;
        Id = question.Id;
        QuestionText = question.QuestionText;
        Q_Text = question.Q_Text;
        AllowMultiSelect = false;

    }
    public List<Answer> Options { get; set; }
    public bool AllowMultiSelect { get; set; }
}

@model SurveysViewModel

<h1>Survey Page</h1>
<form action="/PublicAuthSurvey/CompleteSurvey" method="post" class="form-horizontal">
  @Html.AntiForgeryToken()
  <div class="survey">
     @{ var questions = Model.SurveyQuestions; }
      @Html.EditorForModel(questions)
  </div>
  <input class="btn btn-lg btn-success" type="submit" value="Submit Results" />
</form>

1 Ответ

0 голосов
/ 20 декабря 2018

Спасибо за комментарии до сих пор.Мне наконец удалось туда добраться.

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

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

После большого удаления волос, я думаю, что я почти на месте!

Спасибо, Саймон

...