在www.example.com mvc中对控制器进行简单的 AJAX 调用asp.net

wpcxdonn  于 2022-11-19  发布在  .NET
关注(0)|答案(9)|浏览(241)

我正在尝试开始使用ASP.NET MVC AJAX 调用。

控制器:

public class AjaxTestController : Controller
{
    //
    // GET: /AjaxTest/
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult FirstAjax()
    {
        return Json("chamara", JsonRequestBehavior.AllowGet);
    }   
}

检视:

<head runat="server">
    <title>FirstAjax</title>
    <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            var serviceURL = '/AjaxTest/FirstAjax';

            $.ajax({
                type: "POST",
                url: serviceURL,
                data: param = "",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: successFunc,
                error: errorFunc
            });

            function successFunc(data, status) {     
                alert(data);
            }

            function errorFunc() {
                alert('error');
            }
        });
    </script>
</head>

我只需要打印一个警报,控制器方法返回数据。上面的代码只是在我的视图上打印“chamara”。警报没有触发。

更新

我修改了我的控制器如下,它开始工作。我不清楚为什么它现在工作。有人请解释。参数“a”不相关,我添加它,因为我不能添加两个方法相同的方法名称和参数。我认为这可能不是解决方案,但它的工作

public class AjaxTestController : Controller
    {
        //
        // GET: /AjaxTest/
        [HttpGet]
        public ActionResult FirstAjax()
        {
            return View();
        }

        [HttpPost]
        public ActionResult FirstAjax(string a)
        {
            return Json("chamara", JsonRequestBehavior.AllowGet);
        }
    }
mfuanj7w

mfuanj7w1#

删除data属性,因为您对服务器没有POSTING任何内容(您的控制器不需要任何参数)。
在 AJAX 方法中,您可以使用Razor@Url.Action,而不是静态字符串:

$.ajax({
    url: '@Url.Action("FirstAjax", "AjaxTest")',
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: successFunc,
    error: errorFunc
});

从您的更新:

$.ajax({
    type: "POST",
    url: '@Url.Action("FirstAjax", "AjaxTest")',
    contentType: "application/json; charset=utf-8",
    data: { a: "testing" },
    dataType: "json",
    success: function() { alert('Success'); },
    error: errorFunc
});
monwx1rj

monwx1rj2#

完成更新后,
1.它首先使用默认的HttpGet请求调用FirstAjax操作并呈现空白的Html视图。
1.稍后在加载该视图的DOM元素时, AJAX 调用将被触发并显示警告。
之前你只是将JSON返回到浏览器,而没有呈现任何HTML。现在它呈现了一个HTML视图,可以在其中获取JSON数据。
您不能直接将JSON转换为普通数据,而不能转换为HTML。

hrysbysz

hrysbysz3#

使用Razor通过调用如下操作来动态更改URL:

$.ajax({
    type: "POST",
    url: '@Url.Action("ActionName", "ControllerName")',
    contentType: "application/json; charset=utf-8",
    data: { data: "yourdata" },
    dataType: "json",
    success: function(recData) { alert('Success'); },
    error: function() { alert('A error'); }
});
jmo0nnb3

jmo0nnb34#

如果你只需要在 AJAX 调用中点击C#方法,你只需要传递两个matter类型和url,如果你的请求是get,那么你只需要指定url。请按照下面的代码操作,它工作得很好。

C#程式码:

[HttpGet]
    public ActionResult FirstAjax()
    {
        return Json("chamara", JsonRequestBehavior.AllowGet);
    }

获取请求时的Java脚本代码

$.ajax({
        url: 'home/FirstAjax',
        success: function(responce){ alert(responce.data)},
        error: function(responce){ alert(responce.data)}
    });

发布请求时的Java脚本代码以及[HttpGet]到[HttpPost]

$.ajax({
            url: 'home/FirstAjax',
            type:'POST',
            success: function(responce){ alert(responce)},
            error: function(responce){ alert(responce)}
        });

注意:如果您在视图控制器所在的同一个控制器中使用FirstAjax,则url中不需要控制器名称,如url: 'FirstAjax',

y4ekin9u

y4ekin9u5#

首先,没有必要在一个页面中有两个不同版本的jquery库,“1.9.1”或“2.0.0”足以使 AJAX 调用工作。
下面是您的控制器代码:

public ActionResult Index()
    {
        return View();
    }

    public ActionResult FirstAjax(string a)
    {
        return Json("chamara", JsonRequestBehavior.AllowGet);
    }

视图应如下所示:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>

<script type="text/javascript">
$(document).ready(function () {
    var a = "Test";
    $.ajax({
        url: "../../Home/FirstAjax",
        type: "GET",
        data: { a : a },
        success: function (response) {
            alert(response);
        },
        error: function (response) {
            alert(response);
        }
    });
});
</script>
hgb9j2n6

hgb9j2n66#

这是针对您的UPDATE问题。
由于不能有两个具有相同名称和签名的方法,因此必须使用ActionName属性:
最新消息:

[HttpGet]
public ActionResult FirstAjax()
{
    Some Code--Some Code---Some Code
    return View();
}

[HttpPost]
[ActionName("FirstAjax")]
public ActionResult FirstAjaxPost()
{
    Some Code--Some Code---Some Code
    return View();
}

请参考this链接,进一步参考一个方法如何成为一个动作。非常好的参考。

wb1gzix0

wb1gzix07#

观;

$.ajax({
        type: 'GET',
        cache: false,
        url: '/Login/Method',
        dataType: 'json',
        data: {  },
        error: function () {
        },
        success: function (result) {
            alert("success")
        }
    });

控制器方法;

public JsonResult Method()
 {
   return Json(new JsonResult()
      {
         Data = "Result"
      }, JsonRequestBehavior.AllowGet);
 }
bq8i3lrv

bq8i3lrv8#

而不是使用url: serviceURL,

url: '<%= serviceURL%>',

您是否向successFunc传递了两个参数?

function successFunc(data)
 {
   alert(data);
 }
k4ymrczo

k4ymrczo9#

在global.asax中添加“JsonValueProviderFactory”:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    ValueProviderFactories.Factories.Add(new JsonValueProviderFactory());
}

相关问题