早上好,我会尽力解释这个问题。
该页面会返回特定帐户的信息,但有些人可能在多个帐户上,我希望提供在它们之间切换的功能。
目前我将路线设置为:
{controller}/{action}/{accountcode}
{accountcode}
可以为空,并在操作中进行检查并设置为默认代码。
到目前为止,我的工作正常,因此您可以访问以下网址:
{controller}/{action} OR {controller}/{action}/{accountcode}
因此,我设置了一个下拉列表,为您提供了您可以访问的列表,选择后,它会将您发送到该特定帐户的URL。
当我转到{controller}/{action}
并选择时,这会很有效,因为它需要window.location.href
并附加下拉列表值。
但是,如果您处于下拉列表重定向的{controller}/{action}/{accountcode}
,并且您选择了一个帐户,那么由于我的破旧的javascript逻辑,它只会尝试附加另一个帐户代码。
我想我正在寻找一种方法来获取没有任何参数的当前操作的URL,因此我可以自己定义它们。这是我正在努力的地方,因为我无法使用Url Helper或Route Helper方法,因为此功能在布局页面中,实际上意味着我需要获取当前页面的操作。
这是我的代码希望它提供清晰度:
@if ((ViewBag.Accounts ?? new List<string>{"none"}).Count > 1)
{
@Html.DropDownList("accounts", new SelectList(ViewBag.Accounts, ViewBag.AccountCode))
}
$(function() {
$("#accounts").change(function () {
window.location.href = window.location.href + "/" + $(this).val();
});
});
干杯!
答案 0 :(得分:2)
但是,当您处于{controller} / {action} / {accountcode}所在的位置时 下拉重定向到,你选择一个帐户,它只是尝试 因为我破旧的javascript逻辑而追加另一个帐户代码。
好吧,你可以通过使用URL帮助器轻松修复这个破旧的逻辑:
<script type="text/javascript">
$(function() {
$("#accounts").change(function () {
var url = '@Url.Action(null, new { accountcode = "__code__" })';
url = url.replace('__code__', $(this).val());
window.location.href = url;
});
});
</script>
或者如果这是一个单独的javascript文件,那么只需将基本网址作为HTML 5 data- *属性嵌入到您的下拉列表中:
@if ((ViewBag.Accounts ?? new List<string>{"none"}).Count > 1)
{
@Html.DropDownList(
"accounts",
new SelectList(ViewBag.Accounts, ViewBag.AccountCode),
data_url = Url.Action(null, new { accountcode = "__code__" })
)
}
然后在单独的javascript文件中使用此值:
$(function() {
$("#accounts").change(function () {
var url = $(this).data('url');
url = url.replace('__code__', $(this).val());
window.location.href = url;
});
});
答案 1 :(得分:0)
确保基本网址只包含{controller}/{action}
个值。
window.location = "/Controller/MyAction/" + $(this).val();
或使用Url
助手类:
window.location = "@Url.Action("MyAction")/" + $(this).val();