【发布时间】:2013-11-15 15:15:53
【问题描述】:
如何为 Dropdownlist 静态值(不是从数据库中检索)准备模型,例如 MVC 模型中的枚举或列表,以便它可以在项目中多次使用?如果您能写一篇好文章,我将不胜感激?谢谢。
【问题讨论】:
标签: asp.net-mvc model enums dropdownlistfor
如何为 Dropdownlist 静态值(不是从数据库中检索)准备模型,例如 MVC 模型中的枚举或列表,以便它可以在项目中多次使用?如果您能写一篇好文章,我将不胜感激?谢谢。
【问题讨论】:
标签: asp.net-mvc model enums dropdownlistfor
一如既往,您可以从视图模型开始:
public class MyViewModel
{
public string SelectedValue { get; set; }
public IEnumerable<SelectListItem> Values
{
get
{
return new[]
{
new SelectListItem { Value = "1", Text = "Item 1" },
new SelectListItem { Value = "2", Text = "Item 2" },
new SelectListItem { Value = "3", Text = "Item 3" },
};
}
}
}
然后是控制器:
public ActionResult Index()
{
var model = new MyViewModel();
return View(model);
}
最后是一个视图:
@model MyViewModel
@Html.DropDownListFor(x => x.SelectedValue, Model.Values)
对于枚举,您可以使用其中一些说明自定义助手的帖子。这是一篇说明此类助手的博客文章:http://blogs.msdn.com/b/stuartleeks/archive/2010/05/21/asp-net-mvc-creating-a-dropdownlist-helper-for-enums.aspx
【讨论】:
SelectedValue 属性中获取所选值。
最后我通过将参数描述为隐藏输入找到了解决方案。我不确定是否有更优雅的方法可以将参数从 View 传递到 Controller。非常感谢您提供的好样品。我还将您的所有回复标记为有帮助。这是我为可能遇到类似问题的人提供的最终代码:
ApplicantViewModel:
public class ApplicantViewModel
{
public IEnumerable<Applicant> Applicants { get; set; }
//Codes for Dropdownlist values
public string SelectedValue { get; set; }
public IEnumerable<SelectListItem> Values
{
get
{
return new[]
{
new SelectListItem { Value = "pdf", Text = "Pdf" },
new SelectListItem { Value = "excel", Text = "Excel" },
new SelectListItem { Value = "word", Text = "Word" }
};
}
}
}
申请人控制器:
public ViewResult Reporting()
{
var model = new ApplicantViewModel();
return View(model);
}
public ActionResult RenderReport(string SelectedValue, string name, string fileName, string dataSource, string table, string filter)
{
//Codes for rendering report
...
}
Reporting.cshtml:
@model MyProject.Models.ApplicantViewModel
@using (Html.BeginForm("RenderReport", "Applicant", FormMethod.Post,
new { enctype = "multipart/form-data" }))
{
<div>
@Html.DropDownListFor(model => model.SelectedValue, Model.Values, "-- select an option --")
<input type="hidden" name="name" value="Report1"/>
<input type="hidden" name="fileName" value="image rapor"/>
<input type="hidden" name="dataSource" value="ApplicantDataset"/>
<input type="hidden" name="table" value="ApplicantsView"/>
<input type="hidden" name="filter" value="David"/>
<input type="submit" value="submit" />
</div>
}
【讨论】: