您好,我有一个程序从数据库表中读取以填充下拉列表。
类型表:
id type
1 Day
2 Month
3 Year
型号:
[Display(Name = "Type: "),
Required(ErrorMessage = "Required")]
public int type { get; set; }
控制器:
public void loadDropDown()
{
reviewlogsEntities db = new reviewlogsEntities();
IEnumerable<SelectListItem> type = db.types.Select(m => new SelectListItem
{
Value = SqlFunctions.StringConvert((double)m.id),
Text = m.type1
});
ViewBag.type = type;
}
[HttpGet]
public ActionResult AddLogReview()
{
if (Request.IsAuthenticated)
{
loadDropDown();
return View();
}
else
{
return RedirectToAction("index", "home");
}
}
[HttpPost]
public ActionResult AddLogReview(AddLogModel LogSubmission)
{
loadDropDown();
if (ModelState.IsValid)
{
//Send Data to database
return View();
}
else
{
//If not authenticated then display an error message
ModelState.AddModelError("", "Submission erorr");
}
return View();
}
查看:
@using (Html.BeginForm())
{
@Html.LabelFor(model => model.type)
@Html.DropDownList("type", ViewBag.type as IEnumerable<SelectListItem>, new { onchange = "setDisplay();"})
<input class="submitButton" type="submit" value="Log In" style="margin-left:126px;margin-bottom: 20px;" />
}
我在3个不同的页面上使用相同的表单,一页是日,月和年。 因此,下拉列表应默认为各自链接上的日,月或年。
我的第一个想法是使用javascript设置默认值onload。但是,问题是,如果他们点击日期页面,他们仍然可以执行一个月的日志。这不是问题,直到你意识到因为onload被调用。如果他们在页面上出现任何错误。它将默认返回默认值。因此,例如用户转到日志,但随后意识到他们想要做一个月的日志,他们将下拉列表更改为月份日志,但是用户忘记填写所需的文本框,当他们现在提交时,它将显示所需的盒子没有价值。那时它将默认返回日志日志,如果他们填写表格的其余部分并提交,他们可能没有意识到它是日志而不是月份日志。
所以我的问题是如何只在页面加载时将其设置为默认值,而不是在页面提交/ POST时设置为默认值。
答案 0 :(得分:1)
假设您有一些Model
与ListOfItems
,并且您希望ItemId
成为您的下拉值,Name
作为下拉文字:
@using (Html.BeginForm())
{
@Html.CreateDropDownList(Model.ListOfItems, "DropDownListOfItems",
Model.ListOfItems.First(), "ItemId", "Name")
}
Model.ListOfItems.First()
是您选择默认值的地方
添加了: 这是答案的重要部分:
using System.Collections.Generic;
using System.Web.Mvc;
using System.Web.Mvc.Html;
public static class Extensions
{
public static MvcHtmlString CreateDropDownList<T>(this HtmlHelper helper, IEnumerable<T> list, string name,
T selectedT, string dataValue, string dataText)
{
return helper.DropDownList(name, new SelectList(list, dataValue, dataText, selectedT));
}
}
已添加2:为了防止POST出现问题,您还应该使用下拉列表值填充表单,以便在POST后正确填写。
在@Html.CreateDropDownList
之前的某处添加此代码:
@for (var i = 0; i < Model.ListOfItems.Count; i++)
{
@Html.HiddenFor(model => model.ListOfItems[i].ItemId)
@Html.HiddenFor(model => model.ListOfItems[i].Name)
}