你好我所有的新手mvc我想调用一个控制器的方法,它不是通过$ .ajax在视图中的动作方法但我在浏览器控制台中收到错误。我想问这是不可能的通过ajax调用一个不是action方法的方法。视图代码
@{
ViewBag.Title = "About Us";
}
<script type="text/javascript">
function ajaxcall() {
$.ajax({
url: 'ValidatePin',
type: 'Post',
success: function (result) {
alert(result.d);
}
})
}
</script>
<h2>About</h2>
<p>
Put content here.
<input type="button" onclick="ajaxcall()" value="clickme" />
</p>
这是我的方法代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Services;
namespace MvcApplication1.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
ViewBag.Message = "Welcome to ASP.NET MVC!";
return View();
}
public ActionResult About()
{
return View();
}
[WebMethod]
public static string ValidatePin()
{
return "returned from controller class";
}
}
}
答案 0 :(得分:1)
使用incoding framework的替代解决方案:
控制器
[HttpGet]
public ActionResult ValidatePin()
{
return IncJson(new AlertVM(){Message = "Some thing"});
}
Razor页面
@(Html
.When(JqueryBind.Click)
.Do()
.AjaxGet(Url.Action("ValidatePin","Pin"))
.OnSuccess(dsl => dsl.Utilities.Window.Alert(Selector.Incoding.Data<AlertVM>(r=>r.Message)))
.AsHtmlAttributes()
.ToButton("clickme"))
答案 1 :(得分:0)
为什么你坚持不实现动作方法而不是静态方法? 我的第二个问题是你的方法究竟做了什么?验证什么?那么如何将它传递给这种方法呢?
认为你可能想要这样的东西:
public JsonResult ValidatePin(string id) /*id=pin*/
{
bool result;
// do something
return Json(new { IsValid = result, Message = "something" }, JsonRequestBehavior.AllowGet);
}
$.ajax({
url: '/validatepin/' + pin,
type: 'POST',
dataType: 'json',
data: json,
contentType: 'application/json; charset=utf-8',
success: function (data) {
alert(data.message + ' ' + data.IsValid);
}
})