如何将多个Html.DropDownList选中的值从View(.aspx)传递给MVC控制器的动作?

时间:2012-04-08 22:22:11

标签: asp.net-mvc model-view-controller view drop-down-menu selectedvalue

我需要将多个数据(可能是2个Html.DropDownList的选定值)从MVC View(.aspx)传递给MVC控制器操作方法。我想它会以某种方式来自Html.Hidden表格,但是怎么样?

我无法从Html.DropDownList中获取所选值,并将其作为Html.Hidden(“paramName”,MvcStringSelectedValue)传递给控制器​​的操作。

我的代码是:

                           
        based on<br />

        <%: Html.DropDownList("Semester")%>
        <%= Html.Hidden("strSemesterToBaseOn",returnedValueFromAbove)%>

        <%: Html.ValidationSummary(true) %>           
        <input type="submit" value="Clone" />

    <% } %>
<br/><br/>

我是否需要将“submitt”的输入标签写入2次或只写一次?

编辑(附加代码)

Controller的操作方法:

[HttpPost]
public ActionResult CloneSemesterData(string strSemesterToOrganize, string strSemesterToBaseOn)
{

     .............................................................
     ..............................      
}

HERE(另一个Controller的方法)是DROP DOWN LIST,充满了学期价值

   public ActionResult DepartmentAdministration()
   {
      // Get list of semesters
      var lr = new ListRepository();
      ViewData["Semester"] = new SelectList(lr.ListSemester(3));  //this ListSemester(3) will generate the list with 3 strings ( e.g "WS 2012", "SS2010")

      return View();
   }

.aspx文件中的我的查看代码是:

//当选择radioButton =“Clone”时执行

    <% using (Html.BeginForm("CloneSemesterData", "CourseNeededHours")) 
    {%>
        <%= Html.DropDownList("Semester")%> // this is First drop down list box , from which selected value , I want to transfer as 1st parameter of controller's action method

        <%: Html.ValidationSummary(true) %>           

        based On 

        <%= Html.DropDownList("Semester")%> //this is Second drop down list box, from which selected value, I want to transfer as 2nd parameter of controller's action method.
          <input type="submit" value="Clone" />

    <% } %>

ERROR:

现在,在使用编辑2修复后:它在

下面给出了红线   

因为它不知道ViewData [“SemesterList”] ......

“System.Web.Mvc.HtmlHelper不包含'DropDownList'的定义和重载的最佳扩展方法'System.Web.Mvc.Html.SelectExtensions.DropDownList(System.Web.Mvc.HtmlHelper,string,System.Collections。 Generic.IEnumerable')有一些无效的参数“。

希望现在它会清楚,仍然含糊不清,然后让我知道。

此致 乌斯曼

2 个答案:

答案 0 :(得分:1)

我不确定你在这里问的是什么。您不需要任何类型的隐藏字段来发布下拉列表的选定值。您的下拉列表代码无效。

通常你有这样的东西:

<%= Html.DropDownList("SemesterToOrganize", GetSemesterToOrganize()) %>
<%= Html.DropDownList("SemesterToBaseOn", GetSemesterToBaseOn()) %>

在你的控制器中:

[HttpPost]
public ActionResult MyAction(string SemesterToOrganize, string SemesterToBaseOn) {
    // your code.
}

编辑:

根据你告诉我们的内容。您依赖于填充DropDownList的MVC的行为,因为您要将列表添加到与下拉列表同名的ViewData。这不适合你。您必须单独填充每个下拉列表。

在您的控制器中,执行以下操作:

public ActionResult MyAction ()
{
    ViewData["SemesterList"] = // list of semesters

    return View();
}

然后,在您的视图中,您有:

<%= Html.DropDownList("SemesterToOrganize", ViewData["SemesterList"]) %> 
<%= Html.DropDownList("SemesterToBaseOn", ViewData["SemesterList"]) %> 

然后你的帖子方法

[HttpPost] 
public ActionResult MyAction(string SemesterToOrganize, string SemesterToBaseOn) { 
    // your code. 
} 

如果您想继续争辩说您可以按照自己的方式行事,那么您将无法解决问题。每个下拉列表必须具有自己唯一的ID,否则将无法正确发布。解决这个问题的唯一方法是给每个人自己唯一的id。这会破坏自动获取数据的下拉行为,因此您必须明确指定数据列表。

所以不要再说这是问题的一个不重要的部分。不是。这是问题的关键。

EDIT2:

根据您的上述代码:

<%= Html.DropDownList("strSemesterToOrganize", (SelectList)ViewData["Semester"]) %>
<%= Html.DropDownList("strSemesterToBaseOn", (SelectList)ViewData["Semester"]) %>

这就是你所需要的一切

如果你刚刚给了我们这个,并且没有争辩,那么这将更容易解决。

答案 1 :(得分:1)

    // Try this. Change names and put in the appropriate namespace. 
    //Your view
    @model MvcApplication2.Models.CloneSemesterDataViewModel 
    @Html.LabelFor(x => x.SemesterToOrganize)
    @Html.DropDownListFor(x => x.SemesterToOrganize, Model.ListofSemestersToOrganize)
    --------
    @Html.LabelFor(x => x.SemesterToBaseOn)
    @Html.DropDownListFor(x => x.SemesterToBaseOn, Model.ListofSemestersToBaseOn)

    //view model
    namespace MvcApplication2.Models
    {
        public class CloneSemesterDataViewModel
        {
            public string SemesterToOrganize { get; set; }
            public IEnumerable<SelectListItem> ListofSemestersToOrganize
            {
                get
                {
                    return new List<SelectListItem> { new SelectListItem { Text = "SS2012" , Value = "SS2012"} };
                }
            }

            public string SemesterToBaseOn { get; set; }
            public IEnumerable<SelectListItem> ListofSemestersToBaseOn
            {
                get
                {
                    return new List<SelectListItem> { new SelectListItem { Text = "SS2012", Value = "SS2012" } };
                }
            }
        }
    }


    ----------
    Controller.

    [HttpPost]
    public ActionResult CloneSemesterData(CloneSemesterDataViewModel viewModel)
    {
       //viewModel.SemesterToBaseOn
       //viewModel.SemesterToOrganize
    }

   // This should do the trick.