控制器asp.net MVC3中的模型属性计数0

时间:2011-11-16 13:42:50

标签: asp.net asp.net-mvc asp.net-mvc-3

这些是我的模特。

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,但它显示带有null的选项列表。

我已经在Question类中定义了选项列表。它必须显示,但它没有显示任何选项。为什么它表现得那样。是什么解决方案。

感谢。


这就是我在帖子

中获得的内容
      <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 个答案:

答案 0 :(得分:1)

问题可能是自动装订器不了解如何通过您指定的名称将“selectedObjects”映射到“问题”。

模型绑定器将查找前缀为您在控制器操作中指定的对象的变量名称的表单字段。在您的情况下,模型绑定器正在查找名为“question。*”的字段。

您是否有理由不在MVC中使用内置字段助手?这些将有助于为模型绑定器生成正确的命名约定。

你能更好地描述一下你想做什么吗?此表单的目标是允许用户输入选项,单击添加并将其保存吗?或者是用户查看选项列表的目标,选择一个并将答案发回?

List为null的一个主要原因是没有表示选项集合的表单字段。

答案 1 :(得分:1)

请告诉你的期望。要将Question类中的哪个属性绑定到所选选项。

执行此操作

 public ActionResult SaveDropDown(Question question, string selectedObjects)
    {
            //use selectedObjects property to read the chosen option
    }

答案 2 :(得分:0)

您的操作方法接受“问题”类型的实例。使用FireBug检查作为“FORM”数据传递的数据,并查看该数据是否可以映射到“Question”模型对象。

答案 3 :(得分:0)

试试这个,在模型中添加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作为路线值参数传递 - 可能是问题的来源。