我有一个动态的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排除在外
,代码就能完美运行谁能告诉我这里会发生什么?
答案 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吗?