Html.ActionLink со значением id из выпадающего списка - PullRequest
5 голосов
/ 06 ноября 2010

У меня есть выпадающий список: <% = Html.DropDownList ("ddlNames", новый SelectList (Model.NameList, "ID", "Name"))%>

У меня есть ActionLink: <%: Html.ActionLink ("edit", "Edit", "Members", new {area = "MembersArea", id = XXX}, null)%>

Я хочу значение выпадающего списка в XXX. Поэтому я хочу использовать значения из элементов управления для представления в ActionLink. Это возможно простым способом?

спасибо,

Filip

Ответы [ 2 ]

3 голосов
/ 04 февраля 2011

Вместо того, чтобы изменять значение привязки каждый раз, когда изменяется соответствующий раскрывающийся список, просто измените его один раз, по щелчку.

Пример использования 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>
3 голосов
/ 07 ноября 2010

Вы не можете сделать это, потому что помощники 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" />
<% } %>
...