【发布时间】:2014-05-23 13:10:20
【问题描述】:
我要做的是使用我的数据库进行简单的级联 DDL。 假设我有一个对象类:
public class ObjectModel
{
public int id { get; set; }
public string type { get; set; }
public string name { get; set; }
}
类型是-'factories'、'samples'和'sampleresults'。 用户选择工厂的那一刻——例如——显示所有工厂的名称。 我的 Task 类有 ObjectID 成员和 ObjectType 成员。 所以我想将第二个选项传递给 ObjectType 成员,而 ObjectID 获得第一个选项。 这是我使用的脚本:
<script type="text/javascript">
$(function () {
$.getJSON("/Home/Object/List", function (data) {
var items = "<option>---------------------</option>";
$.each(data, function (i, object) {
items += "<option value='" + object.Value + "'>" + object.Text + "</option>";
});
$("#Objects").html(items);
});
$("#Objects").change(function () {
$.getJSON("/Home/ObjectType/List/" + $("#Objects > option:selected").attr("value"), function (data) {
var items = "<option>---------------------</option>";
$.each(data, function (i, objectType) {
items += "<option value='" + objectType.Value + "'>" + objectType.Text + "</option>";
});
$("#ObjectType").html(items);
});
});
});
</script>
我的看法是:
@Html.LabelFor(model => model.ObjectID)
<select id="Objects" name="Objects"></select>
<br />
@Html.LabelFor(model => model.ObjectName)
<select id="ObjectType" name="ObjectType"></select>
我的控制器是:
public ActionResult Create() { return View(); }
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Task task) {
if (ModelState.IsValid) {
db.Tasks.Add(task);
db.SaveChanges();
return RedirectToAction("Index"); }
return View(task);
}
所以一切正常,每次我放下第一个列表时,我都会得到所有类型,然后第二个 DDL 会显示相关名称。 唯一的问题是我不知道如何将这些值传递给我的模型类(任务类)。 我习惯使用@Html.dropdownlist 但我猜这次它不会起作用,因为我正在使用脚本。
【问题讨论】:
-
您可以发布您尝试发布到的控制器方法吗?这将有助于澄清您的预期结果。另外(与您的问题无关),请注意,如果您希望
LabelFor正常工作以实现可访问性,输入元素的ID需要与属性名称匹配。如果您使用的是 MVC3+,则可以使用 @Html.IdFor(model => model.Property)。 -
public ActionResult Create() { return View(); } [HttpPost] [ValidateAntiForgeryToken] public ActionResult Create(Task task) { if (ModelState.IsValid) { db.Tasks.Add(task); db.SaveChanges(); return RedirectToAction("索引"); } 返回视图(任务); }
-
谢谢,我已将您的代码添加到您的原始帖子中以提高知名度。
标签: c# javascript asp.net-mvc razor html.dropdownlistfor