我需要将多个数据(可能是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" />
<% } %>
现在,在使用编辑2修复后:它在
下面给出了红线因为它不知道ViewData [“SemesterList”] ......
“System.Web.Mvc.HtmlHelper不包含'DropDownList'的定义和重载的最佳扩展方法'System.Web.Mvc.Html.SelectExtensions.DropDownList(System.Web.Mvc.HtmlHelper,string,System.Collections。 Generic.IEnumerable')有一些无效的参数“。
希望现在它会清楚,仍然含糊不清,然后让我知道。
此致 乌斯曼
答案 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.