我有一个下拉列表,它绑定到我的模型中的列表。 Model.list_IDs
当前页面是"编辑"用户通过使用下拉列表固有地更改模型属性的页面。
@Html.DropDownListFor(model => Model.ID, Model.list_IDs, new { style = "width:250px" })
下拉列表中的项目不直观,所以我想提供一个按钮,单击该按钮后,通过存储过程检索其他信息(通过名为GetDetails
的方法从控制器调用)
该按钮是通过动作链接创建的,我计划显示一个部分视图(如一个聚焦的弹出窗口),一旦点击该按钮就会显示附加信息。
@Html.ActionLink(" ", "GetDetails", new { id = Model.ID.ToString() }, new { @class = "lnkMagnify16", title = "View Details" })
显然Model.ID.ToString()
不正确,因为它只会发送模型的当前ID,而不是下拉列表中当前选择的ID。
如何更改Model.ID.ToString()
以代表下拉列表的当前所选项目?
我知道有一种方法可以使用FormMethod.Post(Get selected item in DropDownList ASP.NET MVC)来完成此操作,但我不想使用提交按钮重新加载页面。我也想避免"第三方"如果可能的话,像JavaScript这样的方法。
答案 0 :(得分:1)
JavaScript不是第三方"方法,它也是唯一的方式来完成你想要的东西。无论是通过标准表单发布还是通过AJAX(JavaScript),您必须向服务器发出新请求以获取所需的新信息。
现在,由于你所有的特别关注是一种动态更新链接中Model.ID
值的方法,你可以在没有AJAX或表单帖子的情况下做到这一点,但你仍然必须使用JavaScript,因为客户端的所有动态行为都源自JavaScript。基本上,您需要绑定到下拉列表的更改事件并更改链接的href
属性。
document.getElementById('ID').addEventListener('change', function () {
var selectedId = this.options[this.selectedIndex].value;
document.getElementById('AwesomeLink').href = // alter `href` with `selectedId`
});
但是,如果用户点击该链接,该链接仍会改变整个视图。如果你真的希望用户留在页面上,那么你需要使用AJAX获取该链接的响应,然后以某种方式将其添加到页面中,无论是直接还是通过模式弹出(这将是需要甚至进一步的JavaScript来实现)。此外,还不清楚Model.ID
值如何在URL中结束,即它是否是路径的一部分(/some/url/{id}/
)或查询字符串参数({{ 1}})。如果它是前者,我建议切换到后者,因为这样可以更容易地构建您的URL客户端。
/some/url/?id={id}