从视图 A 调用视图 B 中的 jquery 函数

Posted

技术标签:

【中文标题】从视图 A 调用视图 B 中的 jquery 函数【英文标题】:Calling a jquery function within a view B from a view A 【发布时间】:2013-10-08 15:06:13 【问题描述】:

我在我的 asp.net mvc4 Web 应用程序中有一个视图,用户可以从中配置一些与之相关的内容。当用户单击此视图中的按钮时,例如配置视图,我想在另一个视图中调用 jquery 函数,例如主视图。这个 jquery 函数负责修改主视图中的元素。

在按钮所在的配置视图中,我有以下代码、一些输入文本框和按钮(这在配置控制器中调用 AddItem 操作):

   @using (html.BeginForm("AddItem", "Configure", FormMethod.Post))
      
        @Html.DropDownListFor(m => m.CustomViewModel.SelectedItemId, Model.CustomViewModel.ListItems)
        @Html.TextBox(...)
        <input id="submitAdd" type="submit" value="@Resource.ButtonTitleAdd" />
   

那么当用户点击配置视图上的按钮时,如何从上面的代码中调用主视图中的jquery函数呢?

我还需要将配置视图下拉列表中的值选择传递给这个 jquery 函数。例如,如果下拉列表包含:

“某物1” “东西2” “某事3”

我需要传递下拉列表中所选项目的值。例如,如果用户选择“something1”并且其值为 1,则应将 1 传递给此 jquery 函数。此下拉列表中填充了模型。

【问题讨论】:

【参考方案1】:

我会用一个自定义事件来解决它,你可以从任何你喜欢的地方触发和收听。

像这样触发它:

$.event.trigger('customStuff', [arg1, arg2, argN]);

然后像这样“听”它:

$(document).on('customStuff', function (e, arg1, arg2)  );

【讨论】:

好的,所以在我的主视图中我监听这个事件,并从按钮所在的配置视图中触发它。但是如何在我发布的代码中单击按钮时触发此事件?我必须把那条线放在哪里?抱歉,我是新手…… @user304602 抱歉,有一段时间没用了。你想清楚了吗? 我认为你可以监听提交事件(像这样在表单中添加一个名称:Html.BeginForm("AddItem", "Configure", FormMethod.Post, htmlAttributes: new @name="somename") 并像这样使用它:$('form[name="somename"]').submit(function() _trigger event_ ),例如获取这篇文章中的数据:@ 987654321@ 最后一个解决方案与您评论的第一个解决方案有什么区别?哪个更正确? @user304602 我只发布了一个解决方案。我会说这比简单地监听提交事件更通用。这可以添加到任何地方。【参考方案2】:

当您使用 jQuery 时。我认为像 pubsub 这样的东西是你最好的选择,它鼓励基于事件的松散耦合。例如:

(function($) 

  var o = $();

  $.subscribe = function() 
    o.on.apply(o, arguments);
  ;

  $.unsubscribe = function() 
    o.off.apply(o, arguments);
  ;

  $.publish = function() 
    o.trigger.apply(o, arguments);
  ;

(jQuery));

现在您可以使用以下代码:

// You can pass your custom data here
$.subscribe("firefunction", function(e, a, b, c) 
  console.log(a + b + c);
);

$.publish("firefunction", [ "a", "b", "c" ]);
// logs: abc

// Unsubscribe all handlers for this topic
$.unsubscribe("firefunction"); 

【讨论】:

以上是关于从视图 A 调用视图 B 中的 jquery 函数的主要内容,如果未能解决你的问题,请参考以下文章

使用 mvc 视图中的参数从 jquery 调用 web api

我如何从 jQuery Datatables 调用 django 视图?

如何从MVC5中的jquery ajax调用中获取部分视图和JSON数据?

需要从 MVC 5 中的控制器操作关闭 Jquery UI 对话框

如何从其他视图模型调用主视图模型中的函数?

SQL中的存储过程,函数,视图有啥区别?