通过javascript调用控制器的方法

时间:2013-01-05 19:34:08

标签: jquery asp.net-mvc razor

你好我所有的新手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";

        }

    }
}

2 个答案:

答案 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);
                }
            })