我在c#中有一個Person類。c#類到Js類?
我希望能夠在我的JS做:
var p = new Person();
後來林通過jQuery的Ajax發送p對象到一個ASHX
哪些庫(jQuery的XXX?),它可以幫助我這樣做?
我知道Ajaxtookit有一個屬性:ScriptService
但林不知道有多好,這個解決方案。
我在c#中有一個Person類。c#類到Js類?
我希望能夠在我的JS做:
var p = new Person();
後來林通過jQuery的Ajax發送p對象到一個ASHX
哪些庫(jQuery的XXX?),它可以幫助我這樣做?
我知道Ajaxtookit有一個屬性:ScriptService
但林不知道有多好,這個解決方案。
您可以在jQuery中使用ASPX PageMethods。因此,通過定義模型開始在服務器上的工作:
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
,那麼你可以定義一些aspx頁面一個頁面的方法(/foo.aspx
):
public partial class _Foo : System.Web.UI.Page
{
[WebMethod]
public static string SavePerson(Person p)
{
// do some processing with the person
return "Hello World";
}
}
最後調用該頁面方法:
var p = {
firstName: 'John',
lastName: 'Smith'
};
$.ajax({
url: '/foo.aspx/SavePerson',
type: 'POST',
contentType: 'application/javascript; charset=utf-8',
data: JSON.stringify(p),
success: function(result) {
alert(result.d);
}
});
這裏所示的JSON.stringify方法是在現代瀏覽器中構建的。如果您需要支持舊版瀏覽器,則可以將json2.js腳本添加到您的網頁中。
UPDATE:
正如在評論部分要求這裏是你如何可以設計一個通用的ASHX處理程序,將接收到這個請求,做一些處理並返回一個JSON響應:
public class Foo : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
var serializer = new JavaScriptSerializer();
using (var reader = new StreamReader(context.Request.InputStream))
{
Person person = (Person)serializer.Deserialize<Person>(reader.ReadToEnd());
// do some processing with the person
}
context.Response.ContentType = "application/json";
var result = serializer.Serialize(new { data = "Hello World" });
context.Response.Write(result);
}
public bool IsReusable
{
get
{
return false;
}
}
}
和請求:
var p = {
firstName: 'John',
lastName: 'Smith'
};
$.ajax({
url: '/foo.ashx',
type: 'POST',
data: JSON.stringify(p),
success: function(result) {
alert(result.data);
}
});
我不使用aspx理由ashx所以我沒有webmethod attr。我怎樣才能改變你的代碼使用ASHX文件? – 2012-01-07 16:03:47
@RoyiNamir,答案更新了一個使用通用ASHX處理程序的示例。 – 2012-01-07 16:09:38
@感謝男人! .. – 2012-01-07 16:11:08
做正確的事情在JavaScript
var Person = {
someMethod: function() {
},
someMoreMethods: function() {
}
};
是定義一個人的原型然後你得到你的C#服務器的C#對象轉換爲JSON發送一個序列化版本它是Person
實例作爲JSON和客戶端上你只是有一個XHR處理
xhr.addEventListener("load", function() {
var personJSON = JSON.parse(this.responseText);
var personInstance = Object.create(Person);
var person = extend(personInstance, personJSON);
});
在這裏,您可以獲取屬於所有屬性的人員的json數據。你創建一個Person類的新原型實例,以便實例擁有所有的方法。然後使用通過JSON獲取的數據/屬性來擴展實例。
注意,您必須實現extend
,一個天真的實施將
function extend(target, source) {
Object.getOwnPropertyNames(source).forEach(function (name) {
var pd = Object.getOwnPropertyDescriptor(source, name);
Object.defineProperty(target, name, pd);
});
return target;
}
免責聲明:示例代碼使用了ES5,以合理的方式處理遺留的瀏覽器引擎的自己。
您使用WebForms或MVC? – 2012-01-07 15:00:37
@ M.Babcock webforms – 2012-01-07 15:01:49
你不這樣做。你不能將一個C#類移植到JavaScript中。你重新定義JavaScript中的「class」 – Raynos 2012-01-07 15:12:53