ASP.NET Core and JQuery unobtrusive AJAX not working

David van Dugteren picture David van Dugteren · Jun 21, 2017 · Viewed 13.6k times · Source

If I start a new project in .net 4.5 and hit manage nuget packages, search for ajax, then hit install for ajax unobtrusive. I can then go into my cshtml file and type @Ajax.___ e.g. @Ajax.beginForm

If I create a new project with Dot Net Core... I cannot, where instead it gives me the useless error:

"The name 'Ajax' does not exist in the current context"

I've searched the web, found nothing...

Basically I want to make a Form with an Ajax call as you could do in .net

Such as:

"@using (Ajax.BeginForm("EmployeeMaster", "Home", new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "divEmp" })) {"

Anyone know what else I can try?

In the above, I can see that Ajax is a object of type AjaxHelper which comes from System.web.mvc.webviewpage... so maybe its never meant to be available for .net core

Answer

Nick Albrecht picture Nick Albrecht · Jun 21, 2017

While the Ajax.BeginForm() methods do not work, the actual unobtrusive Ajax html does. The C# methods just help generate the Html form tags. Forgive me in thse syntax is wrong, this is from memory, but you get the idea

@using (Ajax.BeginForm("EmployeeMaster", "Home", new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "divEmp" }))
{
    //form content
}

becomes

<form asp-action="EmployeeMaster" asp-controller="Home" method="POST" data-ajax="true" data-ajax-update="divEmp">
    <!-- form content-->
</form>

NOTE: The above HTML STILL needs the unobtrusive ajax js files for it to wire up these data-* attributes correctly. This is not a part of ASP.NET Core MVC