我发现ASP.Net PageMethods非常方便易用,但我刚开始使用MVC开发并且不确定如何使用它们?
PageMethods.MyFunction()
在MVC中,MyFunction是Controller动作的等价物是什么?
我知道我可以使用该Json
函数返回一个值,但是如何从客户端调用该操作?
我们的团队正试图找出使用页面方法与创建实际asmx Web服务的一些指导原则.在我看来,页面方法主要用于特定于页面的一种类型的调用,其中asmx旨在表示更多可重用的操作和服务.这听起来不错吗?
我有一个页面方法,我从我的JavaScript中打电话说
Pagemethods.MyMethod(MyParameter, onsucess, onfailure);
Run Code Online (Sandbox Code Playgroud)
在守则背后,我有这样的事情:
[WebMethod]
public static void MyMethod(Param)
{
try{
//DoSomething..
}
catch(exception ex)
{
//Log the exception and rethrow
throw new exception(ex.innerexception);
}
}
Run Code Online (Sandbox Code Playgroud)
现在我面临的问题是:
每当我得到异常时,我都会从代码中抛出异常
但是在onfailure方法中,我只是得到一条通用消息,说"服务器方法MyMethod失败并出现以下错误:"
我似乎没有得到异常细节,只有那个通用异常,
我如何获得JavaScript的异常细节,以便根据UI/JavaScript方面处理它.
我已经验证,这不是web.config中自定义错误设置的问题.
有人可以告诉我这里发生了什么吗?
PS:我已经逐步完成了每一行代码,并且在记录之后异常重新抛出了正确的异常细节,即消息.
我new object()
在Javascript中创建了一个,将一些值放入其中并将其传递给PageMethod
...
var filters = new object();
filters.Name = $("#tbxName").val();
filters.Age = parseInt($("#tbxAge").val());
PageMethods.getPeople(filters, getPeopleCallback);
Run Code Online (Sandbox Code Playgroud)
......在它的签名中,它会收到一个dynamic
论点.
[WebMethod]
public static object getPeople(dynamic filters)
{
...
Run Code Online (Sandbox Code Playgroud)
整个代码编译并运行没有问题,除了服务器端PageMethod,它将dynamic
参数理解为Dictionary
.
当我调试代码以查看filters
对象的定义时,它显示以下类型:filters = {System.Collections.Generic.Dictionary<string,object>}
因此,处理它的唯一方法是将其用作Dictionary
......
var name = filters["Name"];
var age = filters["Age"] as int?;
Run Code Online (Sandbox Code Playgroud)
..但我的意图是将它用作动态对象
var name = filters.Name;
var age = filters.Age;
Run Code Online (Sandbox Code Playgroud)
我知道这根本不是什么大问题,而且我作为一个字典访问它绝对没有问题(而且我也知道我可以创建一个DynamicObject
"代理"来像动态对象一样访问字典).
我只想了解这一点.所以:
我希望这可以工作,因为我通常Filter
在服务器端定义这些类并在Javascript中按照相同的结构创建它,并且当我将Type定义为参数时,PageMethod理解它并正确转换它(例如:) getPeople(Filters filters)
.所以,我想知道它是否也可以用动态对象(节省我的时间和不必要的类).
感谢您的时间和帮助.
我正在开发一个asp.net网站.
请帮我解决这个问题.
ASP.NET 2.0,PageMethods。
美好的一天,
当我的页面上的下拉列表更改时,我正在使用ASP.NET AJAX PageMethods动态更改Label的文本。
我知道在客户端更改标签的文本不会在回发之间保留,这就是我的情况。我听说解决方案是将标签内容保留在隐藏字段中,然后在Page_Load中从该字段设置标签文本。
但是,这种解决方案对我来说似乎并不干净。还有其他选择或最佳做法吗?
谢谢!
为了澄清一下,我有一个带有人名的下拉列表。当下拉列表更改时,我想在标签中放入该人的电话。但是,我认为进行完整的回发并不是真正的最佳选择,因此我决定使用PageMethod来获得电话,并通过下拉列表中选择的项目的ID来检索电话,并将其放入标签中。
但是,由于其他控件导致了完整的回发,因此每次回发都会丢失电话。我知道将其放在隐藏字段中,然后在有完整的回发时将其设置回Page_Load中的标签是可行的,但是如果有其他解决方案,我会在措手不及。由于WebMethods被标记为静态,因此我无法编写Label.text = person.Telephone; 在他们中。
有没有办法在用户控件中实现页面方法的功能.
任何帮助表示赞赏,谢谢:)
我正在设置PageMethods以使用javascript访问服务器端代码.我使用firebug进行调试时收到错误"PageMethods未定义".服务器端代码也没有被触发.
我已将脚本管理器"EnablePageMethods"设置为true.我的方法是public和static,它也设置了WebMethod属性.我仍然收到上述错误.可能是因为脚本管理器位于顶级母版页中,该母版页有两个子母版页,然后我的页面被调用:
即
主母版页(带脚本管理器) - >主母版页 - >辅助母版页 - >我的页面 - >我的用户控件(具有WebMethod)
层次结构是否可能导致此问题?
这是web方法
[System.Web.Services.WebMethod]
public static void AddNote(string t)
{
int propid = 1;
if (propid > 0)
{
//Call my method
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的javascript代码:
function editNodes(t) {
alert('test1');
alert(t);
PageMethods.AddNote(t,OnSuccess,OnFailure);
alert('method called');
}
function OnSuccess() {
alert('Success');
if (!navigator.appName == 'Microsoft Internet Explorer') {
window.location.href = window.location.href;
}
}
function OnFailure(error) {
alert('Error:' + error);
}
Run Code Online (Sandbox Code Playgroud)
这就是我所说的:
<a href="#" class="btngeneral" onclick="javascript:editNodes(2);">Save</a>
Run Code Online (Sandbox Code Playgroud) 我在_LAYOUTS
MS SharePoint 2010 的文件夹中部署了一个应用程序页面(aspx).
我想在[WebMethod]
使用jQuery 标记属性的页面内调用一个方法.我正在使用以下代码document.ready()
:
$("#btnOk").click(function () {
var theUrl = '/_layouts/MyProject/MyPage.aspx/MyMethod';
$.ajax({
type: "get",
dataType: "json",
url: theUrl,
data: {},
success: function (response) {
[...]
},
error: function (xhr, textStatus, errorThrown) {
[...]
}
});
});
Run Code Online (Sandbox Code Playgroud)
遗憾的是,此代码不起作用.问题在于URL:事实上,如果我使用这样的绝对URL,它就可以工作
var theUrl = 'http://server/sites/xxx/_layouts/MyProject/MyPage.aspx/MyMethod';
Run Code Online (Sandbox Code Playgroud)
我怎样才能以绝对的方式改变我的道路?
这很奇怪。javascript 文件中的 onSuccess() 函数返回整个网页的大量HTML 代码,而不是我实际从 C# WebMethod 返回的值
1) 我在 Windows 10 上运行 Visual Studio 2015
2) 调试时,我在 SignupAccount C# 方法处保留了一个断点。断点没有被击中。还没有到那个地步。但是调用了 onSuccess 函数
这是一个解释:
ASP.NET Web 表单的 HTML:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<!--Code-->
</head>
<body class="account2 signup" data-page="signup">
<!--Code-->
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"></asp:ScriptManager>
<input type="text" name="firstname" id="firstname" placeholder="First Name" required autofocus>
<input type="text" name="lastname" id="lastname" placeholder="Last Name" required autofocus>
<button type="submit" onclick="signup()" id="submit-form" class="btn btn-lg btn-dark btn-rounded" data-style="expand-left">Sign In</button>
<script src="JS/Account.js"></script>
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
C# …
pagemethods ×10
asp.net ×7
ajax ×3
c# ×3
javascript ×3
asmx ×2
.net ×1
asp.net-ajax ×1
asp.net-mvc ×1
dynamic ×1
exception ×1
jquery ×1
master-pages ×1
url ×1
viewstate ×1
web-services ×1
webmethod ×1