使用 $.getJson 方法从 jquery 调用 C# MVC 控制器方法
call an c# mvc controller method from jquery using $.getJson Method
我显然错过了一些东西,但终其一生都看不到它是什么,所以如果有人能指出我的错误,我将不胜感激。
我有一个简单的详细信息页面,其中包含一个表单,用于向所选详细信息添加注释。
我有一个观点,其中包含以下内容:
@using (Html.BeginForm("Details", "Home", FormMethod.Post, new { id ="commentForm" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<div class="form-group">
@Html.LabelFor(model => model.NewComment.Name);
@Html.TextBoxFor(model => model.NewComment.Name, new { @class = "form-control" })
</div>
<div class="form-group">
@Html.LabelFor(model => model.NewComment.Body);
@Html.TextAreaFor(model => model.NewComment.Body, new { @class = "form-control" })
</div>
<input type="submit" class="btn btn-primary" value="Add Comment" />
}
然后,此视图调用以下 c# 控制器方法:
[HttpPost]
public ActionResult Details(int id,DetailsViewModel model)
{
if (!ModelState.IsValid)
return View(model);
var content =_data.First(c => c.Id == id);
content.Comments.Add(model.NewComment);
return View(new DetailsViewModel(content));
}
如果我使用表单而不添加任何其他代码来使用 jquery 捕获提交,那么这一切都可以正常工作。
当我将以下 JQuery 代码添加到页面时,上面的服务器代码不会执行(我知道我实际上并没有在上述方法中返回任何 json,但如果该方法没有执行,现在似乎是多余的?
$(document).ready(function () {
$("#commentForm").submit(function (event) {
event.preventDefault();
var url = $(this).attr('action');
$.getJSON(url, $(this).serialize(), function (comment) {
alert(comment)
});
});
});
如果还值得注意的是,如果我在 getjson 调用周围添加任何警报,那么这些警报都会正确触发。
有人对我做错了什么有任何想法吗?
当你使用.getJSON
时,它会发出一个GET请求,而你的Details
方法只回答POST请求。
试试这个:
$.ajax({
type: "POST",
url: url,
data: $(this).serialize(),
success: function(comment) {
alert(comment);
}
});
尝试发布到控制器。
$.getJSON 正在执行一个 http get 在幕后。您的控制器终端节点需要发布,并且不会接受 http get。
这是一个将提供相同功能的函数(博客参考):
(function ($) {
$.postJSON = function (url, data) {
var o = {
url: url,
type: "POST",
dataType: "json",
contentType: 'application/json; charset=utf-8'
};
if (data !== undefined) {
o.data = JSON.stringify(data);
}
return $.ajax(o);
};
} (jQuery));
只需将其添加到jQuery包含之后的某个地方即可。
当你
使用FormMethod.Post
时,$.post()
改用 http://api.jquery.com/jQuery.post/
相关文章:
- 当用户点击动态创建的链接时,如何调用JS方法.JQuery,ASP.NET MVC
- 使用查询将对象数组发布到asp.net-mvc控制器操作的正确方法是什么
- 使用 MVC 删除 JavaScript 中硬编码字符串 Asp.Net 最佳方法
- 如何在 l.Content 方法(Asp.net MVC 剃刀)中给出 Javascript 变量@Ur
- 使用 $.getJson 方法从 jquery 调用 C# MVC 控制器方法
- 一种对MVC中的模型进行封装(添加隐私)的方法
- Spring MVC中的PUT方法HTTP Status 400-AngularJS
- 有没有一种简单的方法可以将ExtJS 4 MVC应用程序转换为ExtJS DeftJS MVC
- 什么's是在Microsoft之间共享本地化ui字符串的规范方法'MVC和Javascript
- Asp.net MVC,通过onclickJS事件从客户端调用C#方法
- asp.net mvc操作方法发布除json数据之外的数据
- 从 MVC Action 方法调用 jquery 函数
- 如何将带有数组列表的$(“form”).serialize()从AJAX方法传递到mvc控制器
- 是否有一种搜索引擎友好的方法可以将服务器端呈现的 HTML 与客户端 MVVM/MVC 框架相结合
- 在 PHP MVC 中从 Javascript 调用操作方法
- HTTP 状态 405 - 不支持请求方法“POST”(Spring MVC)
- asp.net mvc 应用程序中的 Jquery 中的悬停方法
- jQuery函数,每10秒从客户端调用一次控制器方法mvc剃刀
- 如何通过路由值将JSON数组发送到操作方法(MVC 4)
- Ajax不会调用控制器方法mvc