如何使用mvc从下拉列表中添加默认选项值?

时间:2017-12-04 12:36:00

标签: javascript jquery asp.net-mvc asp.net-mvc-4

在下拉列表中从数据库中获取值我没有正常工作..我需要手动添加<option value='-1'>Root</option>,这在数据库中不存在。

<div class="col-lg-4">
   <fieldset class="form-group">
    <label class="form-label" for="exampleInput">Domain Name</label>
      @Html.DropDownList("DomainID", null, "--- Select Domain Name ---", new { @class = "select2-arrow" })
       @Html.ValidationMessageFor(model => Model.DomainID, null, new { @style = "color: red" })
    </fieldset>
   </div>
 <div class="col-lg-4">
     <fieldset class="form-group">
       <label class="form-label" for="exampleInput">Parent Module</label>
          <select id="ParentModuleID" class="select2-arrow" name="ParentModuleID"></select>
           @Html.ValidationMessageFor(model => Model.ParentModuleID, null, new { @style = "color: red" })
     </fieldset>
 </div>

Jquery的:

$("#DomainID").change(function () {
        var id = $(this).val();
        $("#ParentModuleID").empty();
        $.get("ParentModule_Bind", { DomainID: id }, function (data) {
            var v = "<option>--- Select Domain Name ---</option>";
            $.each(data, function (i, v1) {
                v += "<option value=" + v1.Value + ">" + v1.Text + "</option>";
            });
            $("#ParentModuleID").html(v);

        });
    });

在上面的jquery <option>--- Select Domain Name ---</option>我需要添加value of -1

的root
public JsonResult ParentModule_Bind(string DomainID)
        {
            userType type = new userType();
            DataSet ds = type.ParentModule_Bind(DomainID);
            List<SelectListItem> statelist = new List<SelectListItem>();
            foreach (DataRow dr in ds.Tables[0].Rows)
            {
                statelist.Add(new SelectListItem { Text = dr["ModuleName"].ToString(), Value = dr["ModuleID"].ToString() });
            }
            return Json(statelist, JsonRequestBehavior.AllowGet);
        }

2 个答案:

答案 0 :(得分:0)

您可以像这样在jQuesry中添加一行

v += "<option value='-1'>root</option>";

或在foreach之上的控制器中添加一行,如下所示

statelist.Add(new SelectListItem { Text = "root", Value = "-1" });

实现结果。

答案 1 :(得分:0)

为什么在使用jQuery的UI中有这些?

我看到的一个大问题是,您正在将列表数据的业务逻辑与UI操作混合在一起。

如果ParentModel列表始终需要此值而不管DomainID,那么我将修改您返回列表的方法

public JsonResult ParentModule_Bind(string DomainID)
{
    userType type = new userType();
    DataSet ds = type.ParentModule_Bind(DomainID);

    //change the following line

    var statelist = new List<SelectListItem> { new SelectListItem { Text = "Root", Value = "-1" };
    foreach (DataRow dr in ds.Tables[0].Rows)
    {
       statelist.Add(new SelectListItem { Text = dr["ModuleName"].ToString(), Value = dr["ModuleID"].ToString() });
    }

    return Json(statelist, JsonRequestBehavior.AllowGet);
}