Javascript 在mvc3中从客户端调用服务器端函数
我已经遵循了,但我的解决方案中唯一有效的是错误消息警报:D 我的js ajax代码:Javascript 在mvc3中从客户端调用服务器端函数,javascript,html,ajax,asp.net-mvc-3,callback,Javascript,Html,Ajax,Asp.net Mvc 3,Callback,我已经遵循了,但我的解决方案中唯一有效的是错误消息警报:D 我的js ajax代码: $(document).ready(function () { $('a').click(function (e) { var data = { 'id': $(this).attr("id") }; var dataVal = JSON.stringify(data); $.ajax({ type: "POST",
$(document).ready(function () {
$('a').click(function (e) {
var data = { 'id': $(this).attr("id") };
var dataVal = JSON.stringify(data);
$.ajax({
type: "POST",
url: "@Url.Action("ActionName", "ControllerName")",
contentType: "application/json; charset=utf-8",
data: dataVal,
dataType: "json",
success: function (id) {
alert(data.d);
alert("yay! it works!");
},
error: function(id){
alert("haha, it doesn't work! Noob!");
}
});
return false;
});
});
它位于主体的末尾,因此在呈现所有其他html内容后加载
这是我在控制器中的回拨功能:
[HttpPost]
public ActionResult Hello(string id)
{
return RedirectToAction(id);
}
以及HTML锚定标记:
<a href="#" style="float:left; font-size:13px;" id="pageName">Read more</a>
你必须修改你的方法
public ActionResult Media()
{
//do some stuff here
return View();
}
差不多
public JsonResult Media()
{
//do some stuff here
return Json(new
{
myData = RenderPartialViewToString("ViewName", optionalModel),
errorMessage = error
});
}
添加以下方法以参考
这个
$(文档).ready(函数(){})
本身是您的保证,它将在DOM就绪时执行。你可以把它放在任何你想要的地方,而不只是放在页面的末尾。你应该返回JsonResult
。什么是重定向到操作(id)?向我们显示重定向位置的代码。这不是您的问题,但无论如何都是错误的:success:function(id)
。它应该是success:function(data)
,因为您在内部依赖它:alert(data.d)
@Satpal-我更新了我的帖子。@MelanciaUK-仍然不起作用。很好,但是为什么不使用JsonResult而不是ActionResult呢?@MelanciaUK,欢呼,因为ActionResult
可以处理Json
就这样离开了它。也更新了答案
public JsonResult Media()
{
//do some stuff here
return Json(new
{
myData = RenderPartialViewToString("ViewName", optionalModel),
errorMessage = error
});
}
protected string RenderPartialViewToString(string viewName, object model)
{
if (string.IsNullOrEmpty(viewName))
viewName = ControllerContext.RouteData.GetRequiredString("action");
ViewData.Model = model;
using (StringWriter sw = new StringWriter()) {
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}