2011-11-16 56 views
0

这些是我的模型。模型属性计数0在控制器asp.net MVC3

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,但它显示选项列表与空。

我已经定义了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"> 

唯一的问题相关的属性都贴。

+0

我不确定我是否理解你的问题:你是说最初,页面没问题(看起来,下拉框中包含所有选项),但单击_Create_按钮后出现问题?如果是,那么_SaveDropDown_方法的代码是什么?这是空的问题,不会像那样编译。何时使用粘贴视图(作为初始页面,还是当您单击_Create_按钮或两者时)? – Codo

+0

当我点击创建按钮,在SaveDropDown method.its显示question.Options.count = 0。我怎么能得到这个问题。选项? – Chakradhar

回答

0

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

+0

嗨帕文这是我在表格post – Chakradhar

1

问题很可能是自动联编程序不知道如何通过您指定的名称将“selectedObjects”映射到“question”。

模型活页夹将查找以您在控制器操作中指定的对象的变量名作为前缀的表单域。在你的情况下,模型联编程序正在寻找名为“question。*”的字段。

有没有理由不使用MVC中内置的字段助手?这些将有助于生成正确的命名约定,以便拾取模型绑定器。

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

列表为空的主要原因之一是没有表示字段代表选项集合。

+0

k。我的目标是创建调查类型的问题。我从选择选项开始。我以XML格式从服务器获取问题和选项,并将其序列化到模型并将其绑定到视图。所以我必须将用户选项保存回服务器。所以我正在编辑选项列表,然后再次序列化为XML并返回到服务器并保存它们。但是这里可以一次渲染一个问题。所以根据questionNo和QuestionType来做这一切。有没有其他方法可以做到这一点? – Chakradhar

+0

对不起,我没有看到你的反应更快。您是否在管理问题/答案的管理部分工作,或者您是否正在为用户回答问卷调查部分工作? –

+0

在大多数情况下,您需要将您的实体模型(问题列表)与您将视图发送给您的视图(视图模型)分开。是否有一个特别的原因要发回选项列表?你打算怎么处理他们?使用名为Options [0] .OptionText和Options [0] .OptionName和Options [1] .OptionText和Options [1] .OptionName的隐藏字段,模型绑定器将自动生成您的列表

1

请说出你的期望。您想要绑定选定选项的类Question中的哪个属性。

或者做这个

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

我想要问题的QuestionNo和selected Options属性。 – Chakradhar

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声明 - 可能是问题的根源。