将选定的下拉列表值从View传递到Controller
我想从我的View中将参数(字符串)传递给我的Controller。 该值应该是从视图中的下拉列表中选择的值。 按钮单击后调用该方法,但在Controller中,参数始终为null。
在视图中:
@using (Html.BeginForm("Send", "Overview", FormMethod.Get)) { Email: @Html.DropDownList("Emails", Model.GetEmails())
}
在控制器中:
public ActionResult Send(string email) { // email is always null! return null; }
在概述模型中:
private List emails; ... public Overview() { emails = new List(); emails.Add(new SelectListItem() { Text = "a@b.com", Value = "a@b.com", Selected = true }); emails.Add(new SelectListItem() { Text = "b@c.com", Value = "b@c.com", Selected = false }); emails.Add(new SelectListItem() { Text = "c@d.com", Value = "c@d.com", Selected = false }); } ... public List GetEmails() { return emails; }
你能帮我解决这个问题吗? 我错过了什么? (顺便说一句,不要介意控制器现在返回null请:))。
你可以在你的模型中使用一个字符串,
public string emails { get; set; };
然后在你的视图上使用DropDownListFor
,
@Html.DropDownListFor(x => x.emails, Model.GetEmails())
并在POST
上直接从模型中获取值。
[HttpPost] public ActionResult Send(OverviewViewModel overviewModel) { //here is the value from the drop down var theEmail = overviewModel.emails; }
根据你的术语,我猜你对所发生的事情感到困惑。 您永远不会从视图向控制器发送任何内容。 相反,视图是组装Html以发送到Web浏览器的东西。 那么实际发生的是:
- 您的浏览器从您的服务器(IIS)请求
/MyApp/Overview
- IIS选择它并将其发送给Asp.Net
- Asp.Net Mvc看到了请求并通过路由数据表明你想在
MyAppController
类上调用Overview
方法 - 该方法运行并生成模型
- Asp.Net Mvc将模型传递给视图引擎,该引擎运行您的视图以生成html
- 将html返回给IIS,将其发送到您的浏览器
- 您的浏览器将html显示为选择控件。
- 用户进行选择并单击表单上的“提交”
- 浏览器对其提交进行编码,并将其发送到表单的action属性中的url(例如
- Asp:net MVC 3:@ Html.Editor在模板中对我的模型进行子集合?
- ASP.NET MVC绑定与远程validation
- Web API 2 / MVC 5:属性路由将参数作为查询字符串传递,以在同一控制器上定位不同的操作
- 为什么生成的DataBaseManagerController表头是使用ASP MVC 4中的lambda表达式生成的
- asp.net mvc 3razor。 导航到查看表tr单击
- 获取堆栈跟踪中的参数值
- 我应该为ASP .NET MVC应用程序使用内置成员资格提供程序吗?
- 使用部分视图时,MVC模型在post上为空
- 试图找出一种在ASP.NET MVC请求管道中的对象之间保持数据的优雅方法