0

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

@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

如何解决这个问题?

4

2 回答 2

1

使用带有 Body 标签的 on Event绑定您的 onchange 事件

$(document).ready(function(){

$('body').on('change', '#SelectedUser', function(){
  var selectedUserId =$(this).val();
   if (selectedUserId == "") {
        selectedUserId = 0;
    }
   $('#EmailAccountsContainer')
        .load('/MyEntityController/EmailAccounts', { userId: selectedUserId });
 });
});
于 2013-02-25T09:25:28.667 回答
0

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

请参阅此以了解如何使用 Jquery 解决此问题:

停止缓存 jQuery .load 响应

于 2013-02-25T09:27:35.240 回答