我有一个与jquery一起获得的文本框列表,我试图通过模型将它们发送到服务器端。
我在服务器端(webmethod)上设置了一个断点,但不会成功...
救命?
这是页面中的代码:
function CreareCont() {
var model = {};
model.Nume = txtNume.val();
model.Prenume = txtPrenume.val();
model.CNPsauCUI = txtCNPsauCUI.val();
model.Strada = txtStrada.val();
model.Numar = txtNumar.val();
model.Etaj = txtEmail.val();
model.Apartament = txtApartament.val();
model.Oras = txtOras.val();
model.SectorSauJudet = txtSectorSauJudet.val();
model.Telefon = txtTelefon.val();
model.Email = txtEmail.val();
model.Parola = txtParola.val();
$.ajax({
type:"POST", url: webservicePageUrl +"/CreareCont",
data: JSON.stringify(model),
contentType:"application/json; charset=utf-8", dataType:"json",
success: OnSuccessCall1, error: OnErrorCall1
});
};
function OnSuccessCall1(response) { alert(response.d); };
function OnErrorCall1(response) { alert(response.status +"" + response.statusText); debugger; };
从控制台可以看到,模型发送似乎还可以,它的值是:
{"Nume":"asd","Prenume":"asd","CNPsauCUI":"asd","Strada":"asd","Numar":"asd","Etaj":"asd","Apartament":"asd","Oras":"asd","SectorSauJudet":"asd","Telefon":"asd","Email":"asd","Parola":"asdasd123"}
这是网络服务代码:
[WebMethod]
public void CreareCont(Inregistrare user)
{
string hash = helper.GetSHA1HashData("123");
}
该模型是C#类:
public class Inregistrare
{
string Nume { get; set; }
string Prenume { get; set; }
string CNPsauCUI { get; set; }
string Strada { get; set; }
string Numar { get; set; }
string Etaj { get; set; }
string Apartament { get; set; }
string Oras { get; set; }
string SectorSauJudet { get; set; }
string Telefon { get; set; }
string Email { get; set; }
string Parola { get; set; }
}
}
使用提琴手后,出现以下错误:{" Message":"无效的Web服务调用,缺少参数值: u0027user u0027。"," StackTrace":"位于System.Web.Script.Services.WebServiceMethodData.CallMethod(Object目标,IDictionary`2参数) r n在System.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams(对象目标,IDictionary'2参数) r n在System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext上下文,WebServiceMethodData methodData,IDictionary'2 rawParams) r n位于System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext上下文,WebServiceMethodData methodData)"," ExceptionType":" System.InvalidOperationException"}
尝试制作CreateCont static。您可能还应该在global.asax中捕获并记录应用程序错误,以帮助您进行调试。
您确定生成的网址正确吗?使用一些客户端开发工具(例如Firebug)进行确认
@AshleyJohn是的,URL正确,我检查了它的... /" / Code / WebService / EBusinessWS.asmx / CreareCont",我的网络服务位于两个文件夹中……确定...
@JasonP如何捕捉和记录错误?
google.com/search?q=global+asax+application_error
尝试一下stackoverflow.com/questions/10416916/
@VivekParekh我使用WebForms,stiil我试过了,没有变化...
@Andrew看到这篇文章和可能的解决方案可能会帮助您tharakaweb.com/tag/500-internal-server-error
@WilfredoP我也这样做了...
如果不确定发生了什么,请使用Fiddler。 :)
您是否有权访问要打的服务器?您可以在操作方法中设置断点吗?
@VivekParekh用过的提琴手,谢谢你的建议。现在我有一个错误文本(我在帖子中添加了它)
@bsayegh是的,服务器是本地主机。不,断点不会命中...
使您的网络方法静态
@sakir完成,现在我终于有了一个更明确的错误:jsfiddle.net/9BfGq
@sakir确定吗?我的方法在一个asmx文件中...在这里,他们说相反:stackoverflow.com/a/5112996/3227909
尝试在ajax设置中命名输入参数。像"数据:{user:JSON.stringify(model)}之类的东西
对不起,我错过了
var data = JSON.stringify({user:JSON.stringify(model)});试试这个
@bsayegh:Json可以...如果我添加用户:...我生成了错误"" Message":"无效的JSON原语:user。"," StackTrace":" ...."
@sakir,我收到此错误:{"消息":"无法将类型 u0027System.String u0027的对象转换为类型 u0027E_business.Code.Library.Inregistrare u0027"," StackTrace":"
您的网络方法必须为静态方法,除非它在asmx中
public static void CreareCont(Inregistrare user)
和json数据需要使用与webmethod参数相同的名称
data: '{"user":'+ JSON.stringify(model)+ '}'
在像public string Nume { get; set; }这样的类属性中包含Public,需要在类对象中反序列化json
试试这个代码
JS
function CreareCont() {
var model = {};
model.Nume = txtNume.val();
model.Prenume = txtPrenume.val();
model.CNPsauCUI = txtCNPsauCUI.val();
model.Strada = txtStrada.val();
model.Numar = txtNumar.val();
model.Etaj = txtEmail.val();
model.Apartament = txtApartament.val();
model.Oras = txtOras.val();
model.SectorSauJudet = txtSectorSauJudet.val();
model.Telefon = txtTelefon.val();
model.Email = txtEmail.val();
model.Parola = txtParola.val();
$.ajax({
type:"POST", url: webservicePageUrl +"/CreareCont",
data: '{"user":'+ JSON.stringify(model)+ '}',
contentType:"application/json; charset=utf-8", dataType:"json",
success: OnSuccessCall1, error: OnErrorCall1
});
};
CS
[WebMethod]
public static void CreareCont(Inregistrare user)
{
string hash = helper.GetSHA1HashData("123");
}
public class Inregistrare
{
public string Nume { get; set; }
public string Prenume { get; set; }
public string CNPsauCUI { get; set; }
public string Strada { get; set; }
public string Numar { get; set; }
public string Etaj { get; set; }
public string Apartament { get; set; }
public string Oras { get; set; }
public string SectorSauJudet { get; set; }
public string Telefon { get; set; }
public string Email { get; set; }
public string Parola { get; set; }
}