为已由数据库信息填充的下拉列表设置默认值.MVC 4.
本文关键字:设置 下拉列表 默认值 MVC 填充 数据库 信息 | 更新日期: 2023-09-27 18:30:53
嗨,我有一个程序可以从数据库表中读取以填充下拉列表。
类型表:
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 页面时将其设置为默认值。
假设你有一些ListOfItems
Model
,并且你想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:为防止开机自检出现问题,您还应该使用下拉列表值填充表单,以便在开机自检后正确填写。
在@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)
}