Javascript : call a C# function - c#

firstly i have searched a lot and all topics seems to be C# : call or invoke a JavaScript function but i want to do the opposite , i want to create a function on C# and also on JavaScript and i want the JavaScript function call the C# function and retrieve it`s data , it seems like a good questions .
The problem is that i have no knowledge on web and i do not know how does it work , but i tried a sample :
Created a class :
public interface IFoo
{
string Bar { get; set; }
}
public class Foo : IFoo
{
public string Bar { get; set; }
}
Then
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public IFoo CreateFoo()
{
return new Foo() { Bar = "somevalue" };
}
public string Bar(IFoo foo)
{
return foo.Bar;
}
}
And Javascript Code :
<script type="text/javascript" language="javascript" >
function Callme(){
alert('Js function start . keep pressing OK')
var foo = external.CreateFoo();
alert(foo.Bar);
foo.Bar = "qwer";
alert(external.Bar(foo));
}
</script>
I get Error from the webbrowser control :
Error : "external" is null or not an object
But the javascript is not showing anything , please guide me if i missed something.

Hold on guys. PAUSE. All of you need to slow down and read. As this guy said:
I get Error from the webbrowser control :
Meaning he is embedding a webbrowser control that opens up this page which runs javascript.
To clear this up, I think he means that:
This is not online.
He has a webBrowserControl in his C# application that opens up a page to run this javascript.
In his app, he wants to use javascript to call a C# method from a class in his app.
Now, I agree that he was a bit ambiguous (hint, please be clearer with your question next time), but you guys are all posting answers and getting ahead of yourself. In fact what he is describing is indeed possible, and this is how you do it.
Now the object you wanna reference in your javascript is window.external. Here is an example in your javascript:
window.external.CreateFoo();
to call CreateFoo(). However, before you can do so, you have to make your class visible to the page that your webbrowser is opening (window.external being the instanced class that you're referencing).
So, to set window.external, when you're creating webBrowser in C#:
webBrowser1.ObjectForScripting = this;
So to sum it up:
In your C# app, set ObjectForScripting of your web browser control to whatever object you want to reference in Javascript.
In the Javascript on your page, you can call window.external.YOURMETHOD(); to call any public method from that ObjectForScripting class that you set originally.
I hope this helps your situation and others will be a bit more careful when reading your question.
EDIT: Also as a reminder, the webBrowserControl depends on the version on IE that the user has installed on his/her computer. So be careful on versioning, javascript will only perform to the extent of what his/her version of IE can handle (same goes for styling and etc.)
Edit Edit: You also need to add the ComVisible attribute [ComVisible(true)]

there is some misunderstood here.
Javascript can't call server function.
Use Ajax for that.
The only way we can think about that is in a framework like GWT, but be careful : GWT compile your java code in javascript which calls via ajax the server.
The thing to have in memory is that if a framework propose you to call a C# or java method directly in javascript, it does not really perform that : it calls a server resource using ajax and then the server resource call the method. The method returns and the ajax response is sent to javascript.

You should really look into how HTTP works and then re-evaluate your question.
You simply can't call a C# function directly from JavaScript because your JavaScript is executed on the client by the browser while the C# is run on the server by the Web server.
If you want to call a function on the server you need to do that through a AJAX request using some kind of Web library like ASP.NET WebAPI or ASP.NET MVC.

To explain Jerome C's answer slightly further.
C# is a server-side language which is executed by a server request. Whereas JavaScript is client-side language, meaning it is handled by the browser. Both have their advantages, and both are commonly used for the same thing, such as validation. The server-side language is a secure way of ensuring something, or executing a command between a database for example. Whereas the client-side language (JavaScript), is more commonly used to improve the user experience but making things more interactive.
As people have suggested, there are ways to communicate between the two, but not "directly". The key word here is AJAX. Using an open source library such as jQuery http://jquery.com/ on the client-side, and then a custom handler (.ASHX file) on the server-side, you can make asynchronous requests between the client and the server.
On a slightly more advanced note; you can directly communicate between JavaScript and C# objects using a library such as SignalR https://github.com/SignalR/SignalR it's a tiny bit fiddly to setup, so I wouldn't recommend it for this instance, but it would definitely be something to consider in the future.

You can't call server function by Javascript directly.
If you need , you can use the __doPostBack("Button1","") instead.
Put your action in the Button1's event.

Javascript and serverside languages cannot directly talk to each other.
The most common (I think) way to do this is using some sort of Ajax call a serverside Web Service:
This means you make a special call in javascript that will reach to a class method written in C#.
Before reading about and making Ajax calls, you should read up on HTTP protocol and how communication between web server and browsers is executed. I think the article in this link is a good place to start reading about HTTP.
You can read about WebServices Web Services related Wiki article, and about Ajax in Ajax wiki Article.
Also :
Ajax calls do not have to be written by hand, javascript frameworks like jQuery can be used. (in jQuery a function like jQuery.$ajax() is very usefull in making ajax calls )
There is an alternative way to do this - you can use a page method.

Related

Passing Variables From Embedded Web Browser to Application

I'd like to know whether it's possible to pass data from a C# application (e.g. WPF) to a web-page (i.e. an HTML page with Javascript) in an embedded Web Browser. If so, how?
Thanks in advance for your help!
You can invoke methods (and thus pass data) in your C# code from JavaScript using Window.external. Try googling for this keyword, more information will come up quickly.
This blog post has a good, simple (WPF-)example how to invoke a C# method from JavaScript using Window.external. Another keyword here is [System.Runtime.InteropServices.ComVisibleAttribute(True)]. You have to mark your handler class with this attribute to be accessible from JavaScript. And finally you tell your WebBrowser control about the handler class via its ObjectForScripting property.

run serverside method from jquery

I know the method that, from jQuery, using ajax I can invoke WebMethod from a aspx or asmx file. That's ok, but I only can place my project logic in ascx.cs files. It is a specific CMS and I can't do anything about it.
So my question is based on example described below:
Lets say users is logged in and is viewing an article. One user wants to mark it as a favourite, so clicks a button. On the server side without, refreshing the page, an appropriate method should run which adds this article to his favourites and then in client side there is an alert - 'Success'.
I dont want anyone to write the code for me for that it is just an example for desribing what functionality I would like to be able to achieve and which technology to use for that.
Thanks for the help.
P.S. I'm using ASP.Net 2.0
ASCX files are not directly accessible from the client (and as such, cannot be targeted via AJAX calls).
If your logic really has to be encapsulated in the ASCX file, you can add in an entrypoint WebMethod in your ASPX that calls the respective ASCX method instead. You'll probably encounter some difficulties related to the WebMethods being static though, so you may eventually need to refactor a bit, depending on how your code is structured now.
You can make ajax call to remote page (with ascx control with your server side method) and then parse output (for example look for world "SUCCESS") to verify, that your method is executed. Not very elegant, but it will work.

how to execute C#.net code in html file?

This will probably sound dumb, but I need to execute a C# code from my html file. For example I just want to execute this
System.Diagnostics.Process.Start(#"D:\Movies\HurtLocker.avi");
Not any server side code.
I can't create aspx page, because to open an aspx page in a browser it needs to be hosted in IIS.
You can't execute server side code from a client side page. If your page is aspx you can use a webservice or click a serverside button from javascript.
Edit: If you want to embed a video player please check this link. You don't need server side code for this. You'll be able to do it with javascript.
Where do you want the c# code to run?
If you want it to run in the browser that is being used to render the html then I'd say that was basically not possible. Something, presumably javascript code in the html page, would have to somehow instantiate a .net clr and pass the c# code to it for execution. The clr does have a COM-based hosting interface that would allow instantiation, but even if you could call this from javascript I think that any sensible browser security settings would prevent it.
If you want the c# to run on the server supplying the html page then you should use asp.net.
EDIT
Ok, you want to run it in the browser. I'm not aware of any examples for hosting a clr in the browser process, sorry.
You can create activex/com objects in js using something like var obj=new ActiveXObject("<comclassname>");, and you might be able to create a CLR that way by instantiating one of the COM classes (maybe CLRRuntimeHost) listed on this page. You could then pass your c# code to your clr for execution. More info here and here. I'm really not sure if that would work, though. I've never used the hosting api, I just know it exists!
Seems like an interesting project to try if you are curious, but deploying this in a real environment would likely present lots of problems. Good luck!
Not C#, but how about .NET dynamic language in the browser with Gestalt? http://gestalt.codeplex.com/
You can create a code block in your ASP file but if this is simple HTML file this is not possible.
At least you will have some application that will read the content of the page compile it and execute.
ASP code block
As Pabuc mentioned you can't execute server side code on the client machine in HTML. If you were to use Silverlight you could execute the code client side, but then the client need to have Silverlight installed and it is not strictly HTML anymore.
Silverlight could be used to play movies client side with C#.
The only way to have C# on client side is Silverlight application [update] or any other browser plugin as #kenny mentioned.
I have tried to find a software for this some time. I have software, which has needs, that are hard to make with traditional Web programming.
Now I have made simple demo, how to create HTML5 online application with C# or VB.NET.
It is Scot library which translates C# to Javascript on time when executing .NET application. It also supports events on Browsers, which is executed in c# code.
To original question:
On the Html page you will need to add single line after :
<script src="myclass.cs"> </script>`
to connect .Net class:
using Scot;
//..
public myclass:Document
{
protected override OnConnect()
{
Elements["mybutton"].OnClick+=new JsInputEventHandler(click);
//your initialization //....
}
private void click(object sender, JsInputEventArgs e)
{
Window.Alert("Click()");
}
}
Demos are quite simple, but actually I needed this library for another project.
It would be nice to have any feedback.

How to run jQuery in my C# class?

I have a ASP.NET MVC project and i want to use jQuery on them. as other mention I put the jQuery on head section and found that they will work in firebug.
Now I want to jQuery in my C# class. how i can use them in C# class. I want to run the code but it's never compile where I goes wrong.
public class Manager
{
public static void Test()
{
// i put here jQuery code but they never compiler i try many time.
}
}
what is the right way to use jQuery in C# class. like in javascript code is work if I write but in c# when I want to try something like ajax request.
$.ajax is work fine in javascript but when I want to run them in C# they not compile. What is the right way to send ajax request from c# class.
Please tell me the way I can use jQuery ajax function in c# class.
The main reason you can't is because jQuery is a JavaScript library, not a C# library so it just won't work. However, I'm not sure why you would want to do that.
Your C# code is running server-side, so what does an AJAX request even mean in that context? You are already running code on the server, there is no need to remotely contact the server over HTTP. Just run whatever C# code you need to get the data you want. Using AJAX would be kind of like trying to call yourself on the telephone to ask yourself something.
I think you have a fundamental misunderstanding of how the web works. Javascript (JQuery is just a Javascript library) runs in the browser. Your C# code runs on the server.
The browser makes a request for a page from the server, which is your C# code (well, your code + whatever the ASP.NET MVC framework does for you) which sends a page to the client. This page can include Javascript which the browser executes.
Your server side code doesn't run Javascript (unless you're using a Javascript based server like Node.JS instead of ASP.NET). It can output javascript for the browser to run, but it itself does not run it.
Now as far making a AJAX request from C#, if you're trying to call something on your own site #JohnFx is correct that it would be pointless because you can just call the code directly without making a request.
If you're trying to fetch data from an external site, you can make an HttpRequest from C# as shown here. There may be some wrapper code that makes it easier to work with, but I don't know any off the top of my head (it's not something that's too commonly done). You'll then need to figure out how to parse the response.
JQuery is a javascript library and therefore JQuery code cannot be put into your C# code. In order for your JQuery to run, you must output it with the rest of your html and it will run in the users browser. JQuery is javascript and cannot run on the server with your C# code.
If you'd like to make a web request to a web page from c#, similar to what happens when you do an Ajax request from jQuery, look at the HttpWebRequest and HttpWebResponse classes.
This link is also a good place to start to learn a bit more.
As the other answers point out, you simply can't execute jQuery code from c# (and you shoulnd't) since jQuery is not a technology that's meant to run inside of ASP.NET, on the server. But instead, jQuery is a library of Javascript code that makes it easier to write Javascript scripts, which execute inside the user's browser. Everything that you can do with jQuery, you can also do with pure Javascript since at the core jQuery is just a collection of javascript functions and objects.
well, the jquery is a rich javascript library and javascript is a client side language. It should be used inside the dom.
c# is server side language which is rendered on the server when the request came into server.
You need to undrstand the difference between client side and server side. here is an example article

How to make request from Class files(serverside) to .aspx file(clientside)?

This is different problem for me. I used ASP.NET2.0 with AJAX,C#.
Regularly client make request from HTML (client side) to any class(.cs) file(server side). And then make updation on that class files through Object or in database.
But I want to make request from Class file (server side) to HTML file (client side) based on that Object.
I m also used HashTable for containing Key and related to that Object.
If you are not able to understand then I try to Explain you my problem differently, I will give you one simple Example :I m calling any function from javascript to my class function, now I want call from class function to javascript function.
please explain me in brief,
Please Help me.
You can actually change the contents of an UpdatePanel during a partial page postback. So if the client clicks something on your ASPX page which alters your object on the server-side, you can update the controls on the ASPX page during that round trip.
If you need to simply update your view occasionally with no user interaction, then the ASP.NET AJAX Timer control will help.
There are three methods for interacting with server side code from the client side:
Update panels: This uses a partial postback where the page essentially does a full postback to the server and then ignores everything except whats in the update panel then sends the result back.
Page methods - This might not be quite what you are looking for since page methods require that the method be static on the page itself.
Web service methods - These are the same web services you may use from your aspx code behind but you will need a script manager on the page to use them from javascript.

Categories

Resources