我有一个下拉列表: <%= Html.DropDownList(“ddlNames”,新的SelectList(Model.NameList,“ID”,“Name”))%>
我有一个ActionLink: <%:Html.ActionLink(“edit”,“Edit”,“Members”,new {area =“MembersArea”,id = XXX},null)%>
我想要XXX中的下拉列表的值。 所以我想在ActionLink的视图中使用控件的值。 这有可能以简单的方式进行吗?
感谢,
菲利普
答案 0 :(得分:3)
您无法执行此操作,因为html帮助程序在服务器端执行,而下拉列值可以在客户端更改。实现它的唯一方法是使用javascript。您可以注册下拉列表的onchange事件并修改锚点的href值:
$(function() {
$('#ddlNames').change(function() {
var value = this.value; // get the selected value
// TODO: modify the value of the anchor
});
});
这可能不是最好的解决方案,因为路由是在服务器端配置的,并且为了修改在客户端进行字符串操作所需的链接值。
作为替代方案,您可以使用表单和提交按钮而不是锚点。这样,下拉列表的选定值将自动发送到服务器,您不需要任何javascript:
<% using (Html.BeginForm("Edit", "Members", new { area = "MembersArea" })) { %>
<%= Html.DropDownListFor(x => x.SelectedName,
new SelectList(Model.NameList, "ID", "Name"))%>
<input type="submit" value="Edit" />
<% } %>
答案 1 :(得分:3)
每次更改相关下拉列表时,不要修改锚点的值,只需在点击时修改一次。
使用Razor的示例:
@Html.DropDownList("DropDownFirstNames", new SelectList(Model.FirstNames, "ID", "Name"))
@Html.DropDownList("DropDownLastNames", new SelectList(Model.LastNames, "ID", "Name"))
@Html.ActionLink("Submit name", "ActionName", "ControllerName", null, new { @id = "SubmitName" })
<script type="text/javascript">
$('#SubmitName').click(function () {
var first = $('#DropDownFirstNames').val();
var last = $('#DropDownLastNames').val();
var path = '@Url.Content("~/ControllerName/ActionName")' + "?firstId=" + first + "+&lastId=" + last
$(this).attr("href", path);
});
</script>