gpt4 book ai didi

C# MVC2 : How to get the selected value of a dropdownlist

转载 作者:太空宇宙 更新时间:2023-11-03 13:56:57 25 4
gpt4 key购买 nike

我正在尝试将一个开发不良的 C# 网络应用程序转换为 MVC2,但我在尝试构建级联下拉菜单时遇到了困难。这是代码:

public IEnumerable<SelectListItem> SchoolList
{
get
{
DataTable dt = ClassModels.GetSchools();
List<SelectListItem> list = new List<SelectListItem>();
foreach (DataRow row in dt.Rows)
{
list.Add(new SelectListItem
{
Text = Convert.ToString(row["School"]),
Value = Convert.ToString(row["SID"]),
});
}
return list;
}
}

public IEnumerable<SelectListItem> DepartmentList
{
get
{
DataTable dt = DomData.GetDepartments(this is where the selected SID goes)
List<SelectListItem> list = new List<SelectListItem>();
foreach (DataRow row in dt.Rows)
{
list.Add(new SelectListItem
{
Text = Convert.ToString(row["Department"]),
Value = Convert.ToString(row["DID"]),
});
}
return list;
}
}

这是部门的模型

public static DataTable GetDepartments(int id)
{
string sql = string.Format(@"SELECT d.department, d.did
FROM dept d
WHERE d.did IN (SELECT DISTINCT(DID) FROM CDS WHERE SID = '{0}')
ORDER BY department", id);

DataTable db_table = new DataTable("departments");
SqlDataAdapter db_adapter = new SqlDataAdapter(sql, iau_conxn_string);

db_adapter.Fill(db_table);
//ddl_dep.DataSource = db_table;
//ddl_dep.DataValueField = "did";
//ddl_dep.DataTextField = "department";
//ddl_dep.DataBind();
return db_table;
}

遗憾的是,我必须在没有 AJAX 或 jQuery 的情况下执行此操作。

最佳答案

由于您不能使用 AJAX,只能使用纯 javascript,您可以订阅第一个下拉列表的 onchange 事件,然后提交表单以填充第二个下拉列表。

但在付诸行动之前,让我们先定义一个 View 模型。在我的示例中,我显然会消除您问题中存在的所有噪音(诸如 DataTables 和数据访问特定代码之类的东西,并简单地对值进行硬编码,以便答案更通用,因此只需将这些硬编码值替换为对数据的调用访问方法):

public class MyViewModel
{
public MyViewModel()
{
Departments = Enumerable.Empty<SelectListItem>();
}

public int? SchoolId { get; set; }
public IEnumerable<SelectListItem> SchoolList
{
get
{
// TODO: fetch the schools from a DB or something
return new[]
{
new SelectListItem { Value = "1", Text = "school 1" },
new SelectListItem { Value = "2", Text = "school 2" },
};
}
}

public int? DepartmentId { get; set; }
public IEnumerable<SelectListItem> Departments { get; set; }
}

然后是一个 Controller :

public class HomeController : Controller
{
public ActionResult Index()
{
return View(new MyViewModel());
}

[HttpPost]
public ActionResult Departments(MyViewModel model)
{
// TODO: use model.SchoolId to fetch the corresponding departments
// from your database or something
model.Departments = new[]
{
new SelectListItem { Value = "1", Text = "department 1 for school id " + model.SchoolId },
new SelectListItem { Value = "2", Text = "department 2 for school id " + model.SchoolId },
new SelectListItem { Value = "3", Text = "department 3 for school id " + model.SchoolId },
};
return View("Index", model);
}
}

最后是一个 View :

<%@ Page 
Language="C#"
Inherits="System.Web.Mvc.ViewPage<MyViewModel>"
%>
<% using (Html.BeginForm(null, null, FormMethod.Post, new { id = "myform", data_departments_url = Url.Action("Departments") })) { %>
<div>
<%= Html.LabelFor(x => x.SchoolId) %>
<%= Html.DropDownListFor(
x => x.SchoolId,
Model.SchoolList,
"-- School --",
new { id = "school" }
) %>
</div>

<div>
<%= Html.LabelFor(x => x.DepartmentId) %>
<%= Html.DropDownListFor(
x => x.DepartmentId,
Model.Departments,
"-- Department --"
) %>
</div>
<% } %>

最后一点当然是 javascript 来订阅第一个下拉列表的 onchange 事件并将表单提交到服务器以填充第二个下拉列表:

window.onload = function () {
document.getElementById('school').onchange = function () {
if (this.value) {
var form = document.getElementById('myform');
form.action = form.getAttribute('data-departments-url');
form.submit();
}
};
};

对于那些没有与您相同的约束并且可以使用 AJAX 和 jQuery 的人,请查看以下答案:https://stackoverflow.com/a/4459084/29407

关于C# MVC2 : How to get the selected value of a dropdownlist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11868990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com