2010-12-17 80 views
1

現在,我的表單只有一個簡單的輸入。我試圖使用jQuery Validate的遠程部分來調用我的web服務,它現在只是返回false。我現在遇到的問題是,當它調用我的web服務時,它正在拉取由.net創建的垃圾輸入的名稱。有沒有辦法來覆蓋這個,並使用輸入的Id和輸入的名稱。這裏是我的jQuery:jQuery使用WebForms和WebService進行驗證

$(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中的頭信息:(注意查詢字符串PARAMS)

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; 
} 

感謝您的幫助。

回答

1

不幸的是,就我所知,當使用ASP.Net WebForms服務器控件(如<asp:textbox>)時,無法解決此問題。儘管在.NET 4中,您具有ClientIdMode="Static"屬性(see here)可禁用自動生成的客戶端ID,但不會影響name屬性。

裏克施特拉爾曾建議在迴應對他的blog post評論說,如果你真的需要可預測的名字,你應該只使用HTML <input>控制:

的ClientIDMode僅影響該控件的ID而不是名字屬性,所以對於回發表單元素,這個名稱仍然是一個在UniqueID中保存的長名稱。雖然恕我直言,這是合理的。如果您確實需要簡單的名稱,則使用普通的INPUT元素而不是ASP.NET控件,特別是如果您不依賴於控件的POSTBACK分配,則可以使用Request.Form []檢索值。

您是否考慮過使用客戶端<input>而不是<asp:textbox runat="server">

此外,您是否考慮過放棄ASP.NET WebForms並使用MVC? ;-)

0

這是我想出的答案。我不得不將我的asp:文本框更改爲HTML輸入,以使其正常工作。此外,我不得不改變web.config到所有HttpGet到我的web服務。這是最好的痛苦。通過使用標準輸入,我也失去了控件的視圖狀態。我很樂意將此轉換爲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 
      }, 
     });