我正在尝试将所选值从下拉列表传递到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#代码。
答案 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');