在加载或清除DOM时刷新浏览器一次

时间:2012-04-22 09:57:33

标签: jquery-mobile

我有一个动态的MVC4,jQuery Mobile应用程序,它在很大程度上起作用。我有一个自动发布下拉列表,通过以下代码从数据库中选择一个列表。

<script type="text/javascript">
    $(function () {
        $("#TownID").live('change', function () {
        //$("#TownID").change(function () {
            var actionUrl = $('#TheForm1').attr('action') + '/' + $('#TownID').val();
            $('#TheForm1').attr('action', actionUrl);
            $('#TheForm1').submit();
        });
    });
</script>

<p>
     @using (Html.BeginForm("SearchTown", "Home", FormMethod.Post, new { id = "TheForm1" }))
    {
        @Html.DropDownList("TownID", (SelectList)ViewBag.TownId, "Select a Town")
    }
</p>

问题是它只在第一次执行搜索时才能正常工作,除非我点击刷新。我不认为这与MVC有任何关系,我认为问题出在AJAX和jQuery Mobile上。

修改:

我第一次搜索 www.mysite.com/Home/Search/2 会产生一个结果并且很好,但第二次在DOM中似乎留下了什么?它寻找:

www.mysite.com/Home/Search/2/2 also

我的日志和“错误加载页面”中出现404错误,但它仍然可以找到结果并正确显示页面!

然后通过第三次搜索,我在日志中收到错误404,并显示“错误加载页面”,但它已经增长,现在寻找:

www.mysite.com/Home/Search/2/2
www.mysite.com/Home/Search/2/2/2 also

然后在每次搜索后继续增长,直到每次测试看似随机点,似乎放弃了我得到错误505

其他编辑:

如果我将jQuery Mobile排除在外

,代码就能完美运行

谁能告诉我这里会发生什么?

4 个答案:

答案 0 :(得分:0)

摆脱: $(function () {

并将其替换为:$(document).delegate('[data-role="page"]', 'pageinit', function () {

请阅读本页顶部的黄色大部分:http://jquerymobile.com/demos/1.1.0/docs/api/events.html

您不能依赖document.ready或每页仅触发一次的任何其他事件。相反,你必须习惯使用jQuery Mobile的自定义页面事件,如pageinit,这样当你的页面被添加到DOM时你的代码无关紧要(你不知道什么时候会在jQuery Mobile中发生这种情况)网站)。有很多事件,请再次阅读我上面链接的文档。

答案 1 :(得分:0)

首先,使用服务器端模板引擎动态生成html。我真的不明白人们在其中看到了什么价值。

我的猜测是,在AJAX开始流行之前,它在10年前就已经有了意义,并且从那时起就一直存在,因为人们有这样的感觉,认为这是“正确的做法”。事实并非如此。特别是移动网络应用程序。

其次,看起来您正在尝试进行非常简单的搜索。所有这些MVC4垃圾让你很难看到真正发生的事情。对于像这样的简单表单提交,您无需在URL中附加参数。实际上,当您提交时,您的TownId应该已经成为POST数据的一部分,因此您只需删除URL修改位。

或者,不要使用表单提交,而只是使用GET和AJAX。我不知道你的应用程序在这里做了什么,但我想你想以某种方式动态地在页面上显示结果,所以GET就足够了。

使用您的开发者浏览器工具(F12)查看提交时确切提交的内容 - 这确实有帮助。对于您的下一个项目,放弃MVC4! “Well established design patterns”我的脚。

答案 2 :(得分:0)

我长期以来一直为这个问题烦恼 我认为DOM中有相同的select元素...... 我使用$('。SelectCSS:last')。val() 它看起来运作良好。

我来自中国,英语很差......

答案 3 :(得分:0)

我想这是未来的一个,MVC和jQuery Mobile现在似乎并没有完全融合。也许MS对此问题的回应是单页应用程序!

SPA也可以满足Danial吗?