asp.NETとjQuery
でajaxを使用する方法を学習しており、ブラウザで簡単なファイルエディタをシミュレートしようとしています。これまでのところ、WebMethodsを使用してajaxとjQuery
を使用してロードされているファイルのリストがあります。ボタンをクリックしてファイルをロードするためにその機能を複製しようとすると、無効なポストバックの例外が発生します。私はボタンにjQuery
をリンクし、入力値をデバッグする多数の方法を試してみましたが、それは遅くなっていると私は単純に問題のあるDを見つけるように見えることはできません。ASP.NET "asp:button"のポストバックまたはコールバック引数がJQuery POSTでクリックされない
マイビュー:
<form id="textform" runat="server">
<div>
<asp:DropDownList ID="ddlSelectFile" runat="server">
<asp:ListItem Text="Select a file..." Value="" />
</asp:DropDownList>
<asp:Button ID="btnLoadFile" runat="server" Text="Load File" />
<asp:Button ID="btnSaveFile" runat="server" Text="Save File" />
<br />
<asp:TextBox ID="txtFileEditor" runat="server" TextMode="MultiLine" Width="100%" Height="100%" />
</div>
</form>
分離コード:
をpublic partial class WebEditor : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
[WebMethod]
public static List<string> GetFileList()
{
string path = HostingEnvironment.ApplicationPhysicalPath + "\\Files";
List<string> files = new List<string>();
foreach(string filePath in Directory.GetFiles(path))
{
string fileName = Path.GetFileName(filePath);
files.Add(fileName);
}
return files;
}
[WebMethod]
public static string LoadFileContents(string fileName)
{
string fileContents = string.Empty;
string path = HostingEnvironment.ApplicationPhysicalPath + "\\Files\\" + fileName;
if (File.Exists(path))
{
fileContents = File.ReadAllText(path);
}
return fileContents;
}
}
FileEditor.js:
$(document).ready(function() {
$("#btnLoadFile").on('click', LoadFile);
$.ajax({
type: "POST",
url: "WebEditor.aspx/GetFileList",
data: '{}',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: OnFileListReceived,
failure: function (response) {
alert(response.d);
},
error: function (response) {
alert(response.d);
}
});
function OnFileListReceived(response) {
var files = response.d;
var fileList = $("#ddlSelectFile");
$(files).each(function (val, text) {
fileList.append($('<option></option>').val(text).html(text));
});
}
});
function LoadFile() {
var selectedFile = $("#ddlSelectFile").val();
$.ajax({
type: "POST",
url: "WebEditor.aspx/GetFileList",
data: JSON.stringify({ selectedFile: selectedFile }),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: OnFileContentsReceived,
failure: function (response) {
alert(response.d);
},
error: function (response) {
alert(response.d);
}
});
}
function OnFileContentsReceived(response) {
var fileContents = response.d;
}
EXCEP
[ArgumentException: Invalid postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.]
System.Web.UI.ClientScriptManager.ValidateEvent(String uniqueId, String argument) +9748914
System.Web.UI.Control.ValidateEvent(String uniqueID, String eventArgument) +108
System.Web.UI.WebControls.DropDownList.LoadPostData(String postDataKey, NameValueCollection postCollection) +64
System.Web.UI.WebControls.DropDownList.System.Web.UI.IPostBackDataHandler.LoadPostData(String postDataKey, NameValueCollection postCollection) +18
System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad) +457
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1833
この問題に対するアドバイス/修正は素晴らしいものです。
ボタンをクリックすると、WebEditor.aspx/GetFileListの "webメソッドを呼び出しているようですが、パラメータはありませんが、パラメータとして' data:JSON.stringify({selectedFile :selectedFile}) '最初の呼び出しにそのようなパラメータがありません。' data: '{}' '。なぜこれが必要ですか? – Aruna
下記の私の更新された回答を見ることができます。 – Aruna