количество свойств модели 0 в контроллере asp.net MVC3 - PullRequest
0 голосов
/ 16 ноября 2011

это мои модели.

public class Question
{

    private string _questionNo;  
    private string _questionText; 
    private List<Option> _options;

    public List<Option> Options
    {
        get { return _options; }
        set { _options = value; }
    }
    public string QuestionNo
    {
        get { return _questionNo; }
        set { _questionNo = value; }
    } 
    public string QuestionText
    {
        get { return _questionText; }
        set { _questionText = value; }
    } 
}

public class Option
{

    private string _optionText; 
    private string _optionNumber; 
    public string OptionText
    {
        get { return _optionText; }
        set { _optionText = value; }
    }
    public string OptionNumber
    {
        get { return _optionNumber; }
        set { _optionNumber = value; }
    } 
}

это мой контроллер.

    public ActionResult GetQuestion()
    {
        Question_Data ques = new Question_Data();
        var vewmodel = ques.GetQuestion("99916939-D916-4CAE-B527-1A0CD8A3C09D", "AAFA7A2B-D840-4202-B38F-563254FF8B63", 1);
       return View(vewmodel);
    }
    public ActionResult SaveDropDown(Question question)
    {

    }

это вид

  <div data-role="fieldcontain">
    @using (Html.BeginForm("SaveDropDown", "GetQuestion", Model))
    {
        @Html.AntiForgeryToken()
        <fieldset>
            <label class="select">@Model.QuestionText
            </label>
            <select name="selectedObjects" id="selectchoice1">
                @foreach (var item in Model.Options)
                {         
                    <option  value="@item.OptionNumber">@item.OptionText</option>
                }
            </select>
            <p>
                <input type="submit" value="Create" />
            </p>
        </fieldset>
    }
</div>

все выглядит хорошо. когда я нажимаю на кнопку «Создать» в представлении, происходит переход к SaveDropDown в контроллере, но в нем отображается список параметров с нулевым значением.

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

Спасибо.


это то, что я получаю в форме сообщения

      <form method="post" action="/GetQuestion/SaveDropDown?Options=System.Collections.Generic.List%601%5Bsd.mvc.Models.Option%5D&QuestionNo=136&QuestionText=What%20is%20your%20current%20relationship%20status%3F&QuestionType=2">

опубликованы только свойства, связанные с вопросом.

Ответы [ 4 ]

1 голос
/ 16 ноября 2011

Возможно, проблема в том, что автобиндер не понимает, как сопоставить «selectedObjects» с «вопросом» по назначенным вами именам.

Механизм связывания будет искать поля формыс префиксом имени переменной объекта, который вы указываете в действии контроллера.В вашем случае связыватель модели ищет поля с именем «question. *».

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

Можете ли вы лучше описать, что вы пытаетесь сделать?Цель этой формы - позволить пользователю войти в параметры, нажать кнопку «Добавить» и сохранить их?Или цель состоит в том, чтобы пользователь мог увидеть список опций, выбрать один и опубликовать ответ обратно?

Одна из ключевых причин того, что список пуст, - нет полей формы, представляющих набор опций,

1 голос
/ 16 ноября 2011

скажите, пожалуйста, что вы ожидали. С каким свойством в классе Question вы хотите связать выбранную опцию.

Или Сделайте это

 public ActionResult SaveDropDown(Question question, string selectedObjects)
    {
            //use selectedObjects property to read the chosen option
    }
0 голосов
/ 17 ноября 2011

Попробуйте, добавьте свойство SelectedOption к вашей модели

public class Question
{

    private string _questionNo;  
    private string _questionText; 
    private List<Option> _options;
    private Option _selectedOption;


    public Option SelectedOption
    {
        get { return _selectedOption; }
        set { _selectedOption = value; }
    }
    public List<Option> Options
    {
        get { return _options; }
        set { _options = value; }
    }
    public string QuestionNo
    {
        get { return _questionNo; }
        set { _questionNo = value; }
    } 
    public string QuestionText
    {
        get { return _questionText; }
        set { _questionText = value; }
    } 
}

И в вашем представлении использовать

@Html.DropDownListFor(t=>Model.SelectedOption.OptionNumber
                       ,new SelectList(Model.Options
                                       , "OptionNumber"
                                       , "OptionText"))

Кроме того, вы передаете Model в качестве параметра значения маршрута в вашем BeginForm отчете - возможно, это источник проблем.

0 голосов
/ 16 ноября 2011

Ваш метод действия принимает экземпляр типа «Вопрос». Проверьте данные, которые передаются как данные «FORM» с помощью FireBug, и посмотрите, могут ли эти данные быть сопоставлены с объектом модели «Question».

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