如何使用Load方法的html元素?

时间:2013-02-25 09:20:55

标签: jquery asp.net-mvc

我有一个下拉列表,如下所示,它只显示用户名及其值的列表:

@Html.DropDownListFor(m => m.SelectedUser,
                                  Model.UsersSelectList,
                                  "-- Select One --",
                                  new { onChange = "users_onchange();" })

并且javascript如下所示,当项目发生变化时会调用一个动作:

    function users_onchange() {

        var selectedUserId = $('#SelectedUser').val();

        if (selectedUserId == "") {
            selectedUserId = 0;
        }

        $('#EmailAccountsContainer')
            .load('/MyEntityController/EmailAccounts', { userId: selectedUserId });
   }

并且EmailAccountsContainer只是一个div:

<div id="EmailAccountsContainer"></div>

并且EmailAccounts Action接受userId并返回显示另一个下拉列表的部分视图。

问题是对Action的调用仅在第一次更改“用户”下拉列表后发生。如果选择了第二个用户,则不会对操作进行调用。

我也拒绝了控制器上的缓存:

[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
public class MyEntityController : Controller

如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

使用 on Event 与Body标记

绑定onchange事件
$(document).ready(function(){

$('body').on('change', '#SelectedUser', function(){
  var selectedUserId =$(this).val();
   if (selectedUserId == "") {
        selectedUserId = 0;
    }
   $('#EmailAccountsContainer')
        .load('/MyEntityController/EmailAccounts', { userId: selectedUserId });
 });
});

答案 1 :(得分:0)

问题是您的浏览器会缓存响应。

有关如何使用Jquery解决此问题,请参阅此内容:

Stop jQuery .load response from being cached