1

我在我的 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 函数。此下拉列表中填充了模型。

4

2 回答 2

3

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

像这样触发它:

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

并像这样“听”它:

$(document).on('customStuff', function (e, arg1, arg2) { });
于 2013-10-02T09:30:55.320 回答
1

当您使用 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"); 
于 2013-10-02T09:19:26.760 回答