jQuery / MVC3函数html onclick只工作一次

时间:2012-03-28 14:52:46

标签: javascript jquery html asp.net-mvc

好的,我有一个在单击图像时调用的函数。出于某种原因,当我点击它时,它只会调用一次,我对它的原因感到有些困惑。

这是我的javascript(结合少量剃须刀),基本上它所做的就是在控制器中调用post方法,返回局部视图并更新局部视图。

function mFunction() {
    @{ x = x = 1; }
    $.post('/Home/_MyPartial', { 'param1': "@x" }, function(result) {
        $('.myUpdatedDiv').html(result);
        $('.anotherDiv').empty();
        $('.anotherDiv').append('@x');
    });
}

然后我有这样的标签

<a href="#" onclick="mFunction()">Hello</a>

它可以像我期望的那样完美地更新视图,但有一些愚蠢的例外。

  1. 每次单击控制器时(多次)都会击中控制器。所以我知道它的工作方式
  2. 页面本身没有更新,第二次没有更换任何内容。控制器成功返回局部视图,但javascript只更新一次。
  3. 所以我很感激为什么它不会多次更新。

    感谢

    修改

    好的,我可以这样说:

    @{ int x = 0; }
    
    <script type="text/javascript">
    function tester() {
        @{ x++; }
        $('.H').empty();
        $('.H').append('@x');
    }
    </script>
    
    <div class="H"></div>
    <a href="#" onclick="tester()">Click</a>
    

    单击标签将显示“1”并单击它将始终显示“1”。这是否只与渲染一次或某事的剃刀代码有关?有办法吗?

3 个答案:

答案 0 :(得分:1)

试试这个

<script type="text/javascript">
var indx = 1;//Set this to be the value from the model you want to display 
function tester() {
    $('.H').empty();
    $('.H').append(indx);
indx++;
}
</script>

<div class="H"></div>
<a href="#" onclick="tester()">Click</a>

答案 1 :(得分:0)

Razor代码只能在服务器上运行,当你下载页面时,你所拥有的是具有Razor值输出的javascript,所以你的第二个例子将如下所示:

<script type="text/javascript">
function tester() {
    $('.H').empty();
    $('.H').append('1');
}
</script>

<div class="H"></div>
<a href="#" onclick="tester()">Click</a>

这就是为什么它只会附加1。

答案 2 :(得分:0)

我建议您使用Firefox的Firebug或Web控制台(Ctrl + Shift + K)来查看异步调用。如果浏览器实际上每次点击都会点击服务器,你就会知道(你甚至可以看到POST或GET的参数)。 它看起来应该每次都与服务器联系,但由于调用之间没有保持状态,所以在第一次调用后总是得到相同的结果(因为你总是在第一次调用后发送相同的X值)。