为已由数据库信息填充的下拉列表设置默认值.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 页面时将其设置为默认值。

为已由数据库信息填充的下拉列表设置默认值.MVC 4.

假设你有一些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)
}