【发布时间】:2013-11-29 11:55:55
【问题描述】:
一般问题概述:我有一个复合项目的创建\编辑视图,我从下拉列表中为组件选择了许多选项。我希望能够添加或编辑在下拉列表中选择的特定组件。
这是一个简短但完整的示例:
假设我有一个Car 模型
public class Car
{
public int Id { get; set; }
public string Name { get; set; }
public BodyStyle BodyStyle { get; set; }
public int BodyStyleId { get; set; }
}
BodyStyle 是Car 聚合的一个组件,定义为:
public class BodyStyle
{
public int Id { get; set; }
public string Name { get; set; }
}
现在我有一个控制器动作来创建汽车,
public ActionResult CreateCar()
{
//BodyStyles is a mock property with all hardcoded BodyStyles, just for demo
ViewBag.Styles = new SelectList(BodyStyles, "Id", "Name");
return View();
}
这是CreateCar 视图的一部分,它定义了BodyStyle 下拉列表。
<div class="form-group">
@Html.LabelFor(model => model.BodyStyle, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.BodyStyleId, (IEnumerable<SelectListItem>)ViewBag.Styles)
@Html.ActionLink("Create", "CreateBodyStyle")
@*here is the problem, can't find a way to pass selected BodyStyle Id to EditBodyStyle action*@
@Html.ActionLink("Edit", "EditBodyStyle")
</div>
</div>
这是EditBodyStyle的幼稚实现
public ActionResult EditBodyStyle(int bodyStyleId)
{
return View(BodyStyles.First(b => b.Id == bodyStyleId));
}
有没有办法让 ASP.NET MVC 将选定的 BodyStyle Id 从 DropDownListFor 传递到 EditBodyStyle 操作?
我已经使用 javascript 实现了这一点,订阅 onchange 并存储选定的值,然后在链接中使用它。但是代码变得一团糟,因为我在几个视图中有近 10 个这样的组件。该功能非常简单,所以我想知道我是否缺少一些 ASP.NET MVC 功能,这将帮助我仅使用 Razor 视图引擎来实现这一点。
这是生成的视图,只是为了了解整个画面:
select 标签的每个选项的格式为:
<option value="1">Coupe - 2 door</option>
<option value="2">Coupe - 3 door</option>
当前实现(上面的视图示例中没有 id,但假设下拉列表和链接有 id,如 js 中所述):
$(function () {
$("#editBodyStyleLink").click(function () {
var id = $("#bodyStylesDropDown").val();
window.location.href = "/Home/EditBodyStyle/?id=" + id;
});
});
【问题讨论】:
-
@jbontinck 我已经注意到第一个,我现在正在使用它,它很好。我并不反对编写 JS,但想知道如果没有它是否可以做到这一点。解决方案 2 有
onchange = "submit();"这意味着一个操作将处理下拉列表中的所有更改,这是不可取的,因为我想在视图级别而不是控制器级别调度编辑操作。 -
没有javascript?你为什么不把表格发到
EditBodyStyle?这里一定要用ActionLink吗?
标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor