So I'm tyring to do this in xml-script if possible. What I'm looking for is how to fire a javascript function I define, but declare it in the <completed></completed> tags of my <webMethod>. I did it in a roundabout way by binding it to an html control and applying a custom transform to that html control, but that feels like cheating. Any advice? Ideally it'd look something like:
<completed>
<invokeMethod target="MyJSFunction" method="invoke">
<bindings>
<binding id="something" dataContext="myWebMethod" datapath="result" property="parameters" propertyKey="inputVariable" />
</bindings>
</invokeMethod>
</completed>
But of course that's not quite right as I tried it and it didn't work...
Ok, I managed to solve this, but I'd like to know if there's a way to solve it w/o resorting to what I did. First, I just used the completed attribute of the <pageMethod> (see my .js extension athttp://forums.asp.net/thread/1342638.aspx at this point in the discussion, though, assume it's a serviceMethod, as the functionality is the same). So, my xml-script worked in this fashion:
<pageMethod method="MyMethodName" id="MyMethodId" completed="CustomJavascriptFunction">
<bindings>
<binding to input stuff />
</bindings>
</pageMethod>
That all worked, except that the eventArgs object being passed back as part of the 'completed' event was a Sys.EventArgs.Empty object, which I figured out after iterating over the properties and then digging into the .js again. For my solution, since I was using my custom 'Com.VelocityDataSolutions.PageMethodRequest' class anyway, I just changed the onMethodComplete function to pass the result variable to the target function. to do that I changed:
target.completed.invoke(target,Sys.EventArgs.Empty);
to
target.completed.invoke(target,result);
It works like I want now, my event handler grabs teh eventArgs object to use for its processing. I might change it to pass a more complex object (e.g. passing all the variables instead of just the result), but for now it works.
My real question, though, is did I have to go through all this? lol... If I wanted to do the same thing w/ a serviceMethod and didn't wantt o mod the atlas.js or subclass or anything, is there a way to pass the web service's output string to the event handler in declarative markup?
No comments:
Post a Comment