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
Related
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.
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.
I would like to know how the HTML source of ajax based sites can be read using HttpWebRequest / HttpWebResponse (That is reading the contents of a website at server side). The problem that I'm facing is that I'm unable to read parts of the webpage which uses Ajax or stuffs like UpdatePanel.
My application is in ASP.NET / C#, so can't think of using stuffs like Browser control or mshtml.dll since I would not be able to serve multiple requests.
Thanks in advance.
this is going to be difficult.
I know you said you don't want to use Browser control, but I'm going to say it anyway. You will most probably be better off using a Browser control. The reasons are as follow:
AJAX sites make multiple calls from the browser to the server to obtain the required view.
The multiple calls are being performed via JavaScript
The data returned from the server may be reformatted by JavaScript before being updated onto the view.
If you are going to do this using HttpWebXyz functions, you will have to do the following:
Make the relevant calls to get the initial page source.
Parse the page for JavaScript.
Evaluate/execute the JavaScript. This may include providing the relevant implementation for functions such as alert and making subsequent calls to the server.
Depending on the complexity of the AJAX site, you may want to reconsider using the browser control. Complex sites are easier process by the control. If the site is simple enough, you may survive parsing and executing the required JavaScript.
This example uses a deprecated class to parse JavaScript.
You may want to explore ICodeCompiler and its relevant classes for the new approach.
Good luck.
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.
I am trying to evaluate javascript from html page based on HTML (I mean some of the variables in javascript function are using html tag id )
I need to use it multiple threads (Not UI) so this means that i can not use WebBroser.
I can not use Eval.JScriptEvaluate because the javascript depends on the html
Is there is any way to achieve this with this limitations
Maybe there is web Service that revives html as string and lets execute some specific script.
You'll need to parse and execute the script - there's a number of projects out there to help with this see:
Are there any .NET CLR/DLR implementations of ECMAScript?
Interpreting JavaScript outside of the browser?
Can you give more detail in your question. e.g. Do you have control over this page that you are trying to run (in which case, maybe you could solve your multiple thread requirements with HTML5 webworkers) and why do you need multiple threads?
Here is one link you might find interesting which, with some work on your side would allow you to load web pages into Rhino (a server side, javascript interpreter) and execute the javascript.
Another link to check out is HTMLunit, which also allows you to simulate a browser that can execute javascript code from within Java.