【问题标题】:Reload page based on selected ID from dropdown根据从下拉列表中选择的 ID 重新加载页面
【发布时间】:2012-03-01 17:21:35
【问题描述】:

我需要根据在 MVC 3 的下拉列表中选择的值来重新加载我的页面。 我的下拉列表是这样定义的:

@Html.DropDownListFor(model => model.ID, new SelectList(Model.SchoolBranches, "ID", "Name", Model.ID), new { id = "Branches", name = "Branches"})

到目前为止,我的脚本是这样定义的:

<script type="text/javascript">
    $(function () {
        $("#Branches").change(function () {
            var selected;
            selected = $(this).val();
            alert(selected);
            // make a call to the Index action passing in the 'selected' value to reload the whole page
    });
});
</script>

我选择的 ID 工作正常,因为警报会在更改时显示正确的 ID。只是找不到任何示例来说明如何导航回索引操作并发送新 ID。我发现的所有示例都显示部分页面或使用 ajax 进行的此类刷新。我需要重新加载整个页面。

谢谢

更新

在@Brandon 的帮助下,我尝试了这些方法

<script type="text/javascript">
    $(function () {
        $("#Branches").change(function () {
            var selected;
            var url;
            selected = $(this).val();
            url = '@Url.Action("Index", "School")';
            alert(url); //gives /School/Index/55  this is also  my current page in my browser address bar
            url = '@Url.Action("Index", "School", new {id = ""})';
            alert(url); //gives /School
            url = '@Url.Action("Index", "School", new {id = ""})' + '/' + selected;
            alert(url); //gives /School/41 

            // window.location = url;
        });
    });

</script>

这是我在 global.asax 中的路线,这样您就可以看到我没有任何疯狂的路线在进行

public static void RegisterRoutes(RouteCollection routes) {
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    //routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
    );
}

更新

这行得通:

url = '@Url.Action("NotIndex", "School", new {id = ""})' + '/' + selected;

我获得了正确的新 URL,并且使用所选 ID 触发了操作

【问题讨论】:

  • 是否要重新加载 url 中查询字符串中的 ID?
  • @Archer 最初加载页面的控制器上的 Index 操作。
  • @charlietfl 是的,我希望新选择的 ID 成为 URL 的一部分,以导航到操作。该页面位于 /Controller/Index/55 上,其中 55 是上一页中选定项目的 ID。在此页面上,我有一个下拉菜单可以选择不同的 ID,并且需要重新加载页面。
  • @CDSmith,索引是您在路线中列出的默认操作,它会省略操作名称,因为它不需要它。无论如何,该请求都会被路由到索引。您实际上是在使用代码时遇到错误,还是只是没有得到您想要的 URL 字符串?重定向应该仍然有效。
  • @Brandon 是的,遇到错误,我明白了,抱歉,处理您的请求时发生错误。找不到网页。 /School/41 页面不存在。

标签: jquery asp.net-mvc-3


【解决方案1】:

只需设置window.location

window.location = '@Url.Action("Index", "Controller", new { id = "" })' + '/' + selected;

这应该会为您的操作生成 URL(清除当前 ID),然后附加新的路由参数。

【讨论】:

  • 不行,它会生成 /Controller/Index/55/41 的 URL,其中 55 是当前索引 ID,41 是新选择的 ID
  • @CDSmith,对不起,你是对的。它正在使用当前参数。查看更新。
  • 不,还是不对。这很奇怪。它会正确生成 ID,但生成的 URL 是 /Controller/41。由于某种原因,它完全错过了动作。我添加了一个 , null 作为第四个参数,因为 URL.Action 在指定路由字典时需要 html 属性,但仍然给出相同的东西......奇怪。
  • @CDSmith,不,它没有。您正在考虑 Html.ActionLink。 Url.Action 不需要第四个参数。另外,我已经对此进行了测试,它应该可以正常工作。如果出现问题,请确保您的路由不会导致任何问题。
  • 你说得对,这就是我的想法,删除了第四个参数,但由于某种原因我仍然得到同样的结果。 /Controller/41 作为新选择的 ID。如果我不附加新 ID 并使用 '@Url.Action("Index", "School")' 重新加载页面;我的网址是 /Controller/Index/55,这是我所在的页面。如果我添加新的 {id=""} 参数,我只会得到 /Contoller。路由是正确的,否则我首先无法使用传入的 ID 进行操作。我看不出有任何理由说明您的示例不起作用,它应该...
【解决方案2】:

我不太会使用 .Net,但这样的东西应该可以工作

        if( selected==someValue){   
        location.href= location.href+'?id=' + id;
        }

【讨论】:

  • 我正在尝试对任何硬编码文本使用 jquery 和约定。 @Brandon 的示例“应该”有效,但没有,但这是使用 jquery 的 MVC 中的正确方法和首选方向
  • 我现在坐的网址是 /Controller/Index/55 所以如果我附加 ?id=41 那么我得到 /Controller/Index/55/41 这是一个无效的路线跨度>
猜你喜欢
  • 2019-04-09
  • 1970-01-01
  • 2013-03-08
  • 1970-01-01
  • 2011-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-12
相关资源
最近更新 更多