从DropDownListFor检索值的问题

时间:2018-08-30 08:48:23

标签: asp.net-mvc html.dropdownlistfor

我遇到一种情况,希望管理员根据自己的喜好对问题进行重新排序,但是,在从表单中的“ DropDownListFor”中检索选择的值到控制器时,我遇到了问题。

将断点放在“ Debug.WriteLine(MV.Count)”处,变量“ SetNewValue”在我的控制器中返回null

那么从“ DropDownListFor”中检索选定的新值和默认选定值以及“ onchange = this.form.submit()”时控制器的当前问题编号的正确方法是什么?

我知道[HttpPost]控制器部分不是交换问题的适当方法,可以通过它查看我设置的变量是否返回在“ onchange”表单提交时从DropDownListFor发送的值

感谢任何形式的帮助,因为我是MVC的初学者。

我的视图

@model IList<AppXamApplication.Models.EditQuestionsAndAnswersViewModel>

@{
ViewBag.Title = "EditQuestionsPage2";
}
<h4>Edit Your Questions Here</h4>

@using (Html.BeginForm("EditQuestionsPage2", "ExamAdmin", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
     <table id="tblQuestions" border="0" style="border:none">
     @for (int i = 0; i < Model.Count; i++)
     {
         if (Model[i].TypeOfQuestion == "Open Ended")
         {
            <tr>
                <td>
                    @Html.DropDownListFor(m => m[i].SetNewValue, new SelectList(Model[i].TotalNoQuestions, "Value", "Text", Model[i].ToSetPreSelectValue), new { @Name = "CurrentQnAction",  onchange = "this.form.submit();" })


                    @Html.HiddenFor(m => m[i].CurrentQuestionNumber, new { CurrentQnNoID = Model[i].CurrentQuestionNumber })
                </td>
                <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
                <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
                <td>
                    @Html.ActionLink("Delete Question", "EditQuestionsPage2", new { Question_ID = Model[i].QuestionID, @class = "form-control" })
                </td>
            </tr>
            <tr>
                <td>
                    <b>Question Type: @Html.DisplayFor(m => m[i].TypeOfQuestion, new { @class = "form-control" }) </b>
                </td>
            </tr>
            <tr>
                <td>
                    @Html.EditorFor(m => m[i].QuestionsAsked, new { @class = "form-control" })
                </td>
            </tr>
            <tr>
                <td>
                    <br />
                    <br />
                </td>
            </tr>
        }
    }
</table>
}

已编辑:我的模型

public class EditQuestionsAndAnswersViewModel
{
    //Questions
    public string QuestionID { get; set; }
    public string TypeOfQuestion { get; set; }
    public string ExamID { get; set; }
    public string QuestionsAsked { get; set; }
    public string UserID { get; set; }
    public int? OrderingQuestions { get; set; }
    public int? CurrentQuestionNumber { get; set; }
    public string SetNewValue { get; set; }
    public int? ToSetPreSelectValue{ get; set; }
    public IList<SelectListItem> TotalNoQuestions { get; set; }
    public IList<EditAnswers> PossibleAnswers { get; set; }
    public string AnswerID { get; set; }
    public string AnswerText { get; set; }
}

已编辑:我的控制器

[HttpGet]
public ActionResult EditQuestionsPage2()
{
   if (ModelState.IsValid)
   {
      using (var ctx = new AppXamApplicationEntities())
      {                   
         var CurrentExamID2 = (string)Session["CurrentExamID2"];
         string CurrentExamID2_string = Convert.ToString(CurrentExamID2);
         var query = ctx.Questions.Where(x => x.ExamID.Equals(CurrentExamID2_string))
         .Select(x => new EditQuestionsAndAnswersViewModel()
         {
                QuestionID = x.QuestionID,
                TypeOfQuestion = x.TypeOfQuestion,
                ExamID = x.ExamID,
                QuestionsAsked = x.QuestionsAsked,
                UserID = x.UserID,

                ToSetPreSelectValue= x.QuestionOrder,

                // To Order the questions in ascending order
                OrderingQuestions = x.QuestionOrder,

                // To Display Current Question Number
                CurrentQuestionNumber = x.QuestionOrder,

                // To Display the dropdownlist as well as set the default selected value to be displayed for each question in the dropdownlist
                TotalNoQuestions = ctx.Questions.Where (v=> v.ExamID.Equals(x.ExamID)).Select(v => new SelectListItem
                {
                    Value = v.QuestionOrder.ToString(),
                    Text = v.QuestionOrder.ToString(),

                 }).ToList(),
                PossibleAnswers = x.Answers.Where(y => y.QuestionID.Equals(x.QuestionID)).Select(y => new EditAnswers()
                {
                   AnswerID = y.AnswerID,
                   AnswerText = y.AnswerText
                }).ToList()
         }).ToList().AsQueryable();
            var queryOrdered = query.OrderBy(x=> x.CurrentQuestionNumber).ToList(); 
            return View(queryOrdered);
         }                
    }
    return View();
}


[HttpPost]
public ActionResult EditQuestionsPage2(string action, string CurrentQnAction, int? CurrentQnNoID, IList<EditQuestionsAndAnswersCollectionModel> MV,   string ToRetrieveSelectedValue, AddQuestions _model)
{
    if (ModelState.IsValid)
    {
        if (CurrentQnNo!= null)
        {
            //Breakpoint placed over here
            Debug.WriteLine(MV.Count);           
        }
    }
    return View();
}

0 个答案:

没有答案