从ASP.NET MVC控制器触发/调用javascript / jQuery事件

时间:2011-07-08 11:37:32

标签: jquery asp.net-mvc-3 javascript-events

我有一个与此how to call javascript function from Controllers file in MVC?非常相似的问题,但提供的答案并不完全符合我的要求。

我想要做的是,我想返回一个视图,但我想触发/调用javascript / jquery事件。例如在我的控制器中:

 public ActionResult List()
    {
        // do some processing
        // Call the javascript/jquery event            

        return this.View();
    }

现在我尝试这种方式的方法是使用视图包:

 public ActionResult List()
    {

        ViewBag.MovePanel = "yes";
        return this.View();
    }

然后在我看来,我有类似的东西:

<input type="hidden" name="move" id="move" value="<%: (string)ViewBag.MovePanel %>" />
<script type="text/javascript">
$('#move').change(function () {
    console.log('changed');
});

该值设置为“yes”,但“change”事件永远不会被触发。

我如何实现我的目标?

编辑: 在达林的评论之后,这就是我想要实现的目标。 我们正在尝试创建一个类似于图像轮播的表单轮播。所以,我想要做的是控制是否显示下一个表单。

例如,典型的工作流程是这样的:

  1. 说我在第一个表单上,这是一个项目列表。我选择和项目,然后单击编辑。
  2. 然后发生的是列表表单从视图中隐藏(但未关闭),并且向用户显示编辑表单。
  3. 然后,用户对表单进行一些更改并尝试保存。
  4. 如果没有验证错误,则关闭编辑表单,并将前一个列表表单显示在视图中。
  5. 如此有效地解决了我在最后一步遇到的问题,即获取列表表单。

    在更广泛的上下文中说当我提交表单并且出现错误时,我应该能够将“编辑”表单保留在视图中,而不是关闭它并且不显示先前打开的“列表”表单。

    我希望这是一个更明确的解释。

2 个答案:

答案 0 :(得分:0)

你要注意的一件事是, 你不能从服务器端调用javascript(客户端代码)方法。 (除了推动)。

并且,在您的代码中,$(“#move”)的值永远不会改变。它的价值是“是”。 如果你改变$(“#move”)的值而不是“yes”,它将触发。

答案 1 :(得分:0)

确定,

达林是对的,设计已经关闭。所以我最终要做的是“ajaxify”我的所有表单,而不是依赖于HTML表单提交。我保持沉默只是因为它意味着更多的工作,但在完成之后,它并没有像我想象的那么长。

然而,以下内容对我有很大的帮助How to read modelstate errors when returned by Json?