使用javascript替换actionlink中使用的匿名类型中的值

时间:2013-11-26 23:06:28

标签: jquery asp.net-mvc razor

我正在尝试将所选值从下拉列表传递到actionlink。

目前它是这样的,但不起作用:

<script type="text/javascript">
$(function () {
    $('#SiteDropDown').change(function () {
        var value = $('#SiteDropDown option:selected').text();
        $('#editlink').attr('href', value);
    });
});
</script>


@foreach (var item in Model) {
    <tr>
        <td> @Html.DisplayFor(modelItem => item.Name) </td>
        <td> @Html.DisplayFor(modelItem => item.SiteReference) </td>
        <td> @Html.DropDownList("SiteDropDown") </td>
        <td> @Html.ActionLink("View", "ViewInvoice", new { siteId = item.Id, filename =     "editlink" }) </td>

我想要的是Javascript在Actionlink中替换字符串“editlink”但似乎无法正确使用它。我知道Javascript从下拉列表中获取所选值。但是我找不到将它添加到我的Actionlink的正确方法。下拉列表包含一个文件列表,如果我使用有效的文件名对文件名=硬编码,则控制器会处理请求。

非常感谢任何帮助或指示。

提前感谢,

我最后做的是这个(我确定它可能很整洁等但是它有效):

<script type="text/javascript">
    $(function () {
        $('#editlink').on('mouseenter', function () { 
            var value = $('#SiteDropDown option:selected').text();
            var value1 = "\\" + value;
            var link = document.getElementById('editlink').outerHTML;
            var newlink = link.replace(/xx/, value1);
            document.getElementById('editlink').outerHTML = newlink;
            document.getElementById('Button1').value = newlink;

        });
    });
</script>

@Html.ActionLink("View", "ViewInvoice", new { siteId = item.Id, filename = "xx" }, new { id = "editlink" })

感谢您的回答NaNpx,它让我思考我实际在做什么,即修改HTML而不是修改剃刀语法中的c#代码。

1 个答案:

答案 0 :(得分:0)

所以看起来您只想替换href字符串的'editlink'部分,但是您要用所选选项中的文本替换整个href。试试这个 - http://jsfiddle.net/Uz784/

首先,它采用editlink href的原始版本,并将其作为数据存储在select元素中。这种方式随着字符串在更改时更新,有一种常见的搜索和替换方法。剩下的就差不多了。

var siteDropDown = $('#SiteDropDown'),
    editLink = $('#editLink');

siteDropDown.data('editLink',editLink.attr('href')).on({
    'change': function(){
        var href = siteDropDown.data('editLink').replace('filename=editlink','filename=' + encodeURIComponent(siteDropDown.find('option:selected').text()));
        editLink.attr('href',href);
    }
}).trigger('change');