现在我有一个单一输入的简单形式。我正在尝试使用jQuery Validate的远程部分来调用我的webservice,现在只是返回false。我现在遇到的问题是当它调用我的webservice时它会拉出输入的名称,这是由.net创建的一些垃圾。有没有办法覆盖它并使用输入的Id和输入的名称。这是我的jQuery:
$(function () {
$('form').validate();
$("#tbSiteName").rules("add", {
required: true,
remote: "webservices/webservice.asmx/HelloWorld"
});
});
这是我的HTML:
<label for="tbSiteName">Name:</label>
<input name="ctl00$MainContent$tbSiteName" type="text" id="tbSiteName" class="required" />
以下是Chrome的标题信息:(请注意查询字符串参数)
Accept:application/json, text/javascript, */*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Content-Type:application/x-www-form-urlencoded
Cookie:ASP.NET_SessionId=qvupxcrg0yukekkni323dapj
Host:localhost:56803
Referer:http://localhost:56803/Default.aspx
User-Agent:Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.224 Safari/534.10
X-Requested-With:XMLHttpRequest
Query String Parameters
ctl00%24MainContent%24tbSiteName:ts
从服务器端我收到500内部服务器错误,因为我的签名与我的帖子不符。
Webservice代码:
[WebMethod]
[ScriptMethod]
public bool HelloWorld(string tbSiteName) {
return tbSiteName.Length > 5;
}
感谢您的帮助。
答案 0 :(得分:1)
不幸的是,据我所知,使用ASP.Net WebForms服务器控件(如<asp:textbox>
)时无法解决这个问题。虽然在.NET 4中,您具有ClientIdMode="Static"
属性(see here)来禁用自动生成的客户端ID,但这不会影响name
属性。
Rick Strahl建议回应他对blog post的评论,如果你真的需要可预测的名字,你应该只使用一个html <input>
控件:
ClientIDMode仅影响控件上的ID而不影响NAME属性,因此对于回发表单元素,名称仍将是在UniqueID中保存的长名称。虽然恕我直言,这是合理的。如果你真的需要简单的名字,那么使用普通的INPUT元素而不是ASP.NET控件,特别是如果你不依赖POSTBACK控件分配来使用Request.Form []来检索值。
您是否考虑过仅使用客户端<input>
而不是<asp:textbox runat="server">
?
此外,您是否考虑过删除ASP.NET WebForms并使用MVC? ; - )
答案 1 :(得分:0)
这是我想出的答案。我必须将我的asp:textbox更改为HTML输入才能使其正常工作。另外,我必须将web.config更改为所有HttpGet到我的webservice。这充其量是痛苦的。我通过使用标准输入也失去了对控件的viewstate。我很乐意将其转换为MVC,但这不是一个选择。
感谢您的帮助。
$("#tbSiteName").rules("add", {
required: true,
remote: function() {
var r = {
url: "/webservices/ipmws.asmx/SiteValid",
type: "POST",
data: "{'tbSiteName': '" + $('#tbSiteName').val() + "'}",
dataType: "json",
contentType: "application/json; charset=utf-8",
dataFilter: function(data) { return (JSON.parse(data)).d; }
}
return r
},
});