尝试使用Ajax将字符串值发送到Home控制器。在Ajax调用之后会出现错误(在Google Chrome开发人员工具中):Failed to load resource: the server responded with a status of 404 (Not Found)
:
$.ajax({
url: 'Home/TestAction',
data: "Test data",
type: 'POST',
success: function (obj) {
alert('Suceeded');
}
});
更新:
之后我已经尝试了所有回复(截至目前)的网址部分到这篇文章,网址结果是正确的,但我还是得到了{ {1}}和warning
,如下图所示。 注意:图像中控制器和操作的名称不同,但它们位于VS2015中名为Controllers的默认文件夹中。我没有创建任何子文件夹等。此外,这是在开发机器error
上。请点击图片以便能够清楚地看到该消息。
更新2 :
为了使我的问题更容易理解,我已经在official ASP.NET MVC Core tutorial之后创建了一个测试ASP.NET核心应用程序。请参阅下面的错误图片。
控制器:
Win10 with VS2015 ASP.NET Core 1.1, IIS EXPRESS
查看 [.. \ views \ movies \ Index.cshtml]。注意:我最后只添加了一个额外的按钮[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(int id, [Bind("ID,Genre,Price,ReleaseDate,Title")] Movie movie)
{
if (id != movie.ID)
{
return NotFound();
}
if (ModelState.IsValid)
{
try
{
_context.Update(movie);
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!MovieExists(movie.ID))
{
return NotFound();
}
else
{
throw;
}
}
return RedirectToAction("Index");
}
return View(movie);
}
和<button type="button" id="testid" class="Savebtn">Test</button>
来电。
Ajax
错误[在Google Chrome开发者工具中] :
答案 0 :(得分:2)
应该是(如果你在js文件中):
$.ajax({
url: '/Home/TestAction', //note this line (You get your url from root this way, not relative like you do)
data: "Test data",
type: 'POST',
success: function (obj) {
alert('Suceeded');
}
});
或者像Stephen Muecke说的那样(如果您的脚本在View上):
$.ajax({
url: '@Url.Action("TestAction", "Home")', //note this line
data: "Test data",
type: 'POST',
success: function (obj) {
alert('Suceeded');
}
});
答案 1 :(得分:2)
将您的网址更改为
url: '@Url.Action("TestAction", "Home")'
始终使用Url.Action
帮助程序方法生成操作方法的完全限定URL。您可以查看更多详细信息并重载here
答案 2 :(得分:2)
之前发布的所有答案似乎都非常不灵活且无法正常工作,因为在剃刀模板引擎中未定义JavaScript代码,这在捆绑/缩小cs / js文件时会产生效果。
尝试将其添加到标题部分
中的_Layout.cshtml
文件中
<head>
...
<base href="~/"/>
</head>
这会将基本网址设置为您的应用程序主页。所有相对网址都将附加到此基本网址。这也适用于jQuery请求,因为较新的版本确实尊重base-Tag,因此当你的JavaScript代码没有在razor(* .cshtml)模板中呈现时应该可以正常工作。
嗯......
您的操作应该类似于
[Route("api/[controller")]
public class MovieController {
[HttpPost("{id}")]
public async Task<IActionResult> Edit(int id, [FromBody] Movie movie)
{
}
}
注意:通常,对于RESTful服务,您使用PUT更新/替换资源,使用POST来创建它。见Relationships between URL and HTTP Methods。
和你的jQuery / Ajax请求一样
// example movie object, this depends on the definition of your model class on the server
var movie = {
id: 1,
name: "Back to the Future",
genre: "Sci-Fi"
};
$.ajax({
url: 'api/movies/'+movie.id,
data: movie,
type: 'POST',
success: function (obj) {
alert('Suceeded');
}
});