C# 如何将JSON结果返回到Ajax.begin

C# 如何将JSON结果返回到Ajax.begin,c#,.net,ajax,asp.net-mvc,asp.net-mvc-5,C#,.net,Ajax,Asp.net Mvc,Asp.net Mvc 5,我有一个简单的表格: @using (Ajax.BeginForm("CreateProductFromAjaxForm","Product" , null, new AjaxOptions() { HttpMethod = "post", OnSuccess = "getresult" }, null)) { @Html.EditorFor(m => m) &

我有一个简单的表格:

@using (Ajax.BeginForm("CreateProductFromAjaxForm","Product" , 
                  null, 
                  new AjaxOptions() {  HttpMethod = "post", OnSuccess = "getresult" },
                  null))
{
    @Html.EditorFor(m => m)
    <hr />
    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" class="btn btn-info" value="Next" />
        </div>
    </div>
}  
我已将以下内容添加到Web.Config:

 <add key="ClientValidationEnabled" value="true" />
 <add key="UnobtrusiveJavaScriptEnabled" value="true" />
单击“提交”按钮后,生成的页面仅显示:

{"result":"success"}
我希望我可以在
OnSuccess=“getresult”
处理程序中处理结果,但它似乎不起作用

基本上,我使用的是Ajax.BeginForm主要用于客户端验证

你能告诉我怎么了吗

更新:我在AjaxOptions中添加了
HttpMethod=“post”

更新:
getresult
,在
Ajax.BeginForm
上面定义如下:

<script type="text/javascript">
    var getresult = function (data) {
        alert(data.result);
    };
</script> 

var getresult=函数(数据){
警报(数据、结果);
};

尝试指定HTTP方法:

new AjaxOptions() {  
    OnSuccess = "getresult", 
    HttpMethod = "post" 
}
例如:

@using (Ajax.BeginForm("CreateProductFromAjaxForm", "Product" , null, new AjaxOptions() {  OnSuccess = "getresult", HttpMethod = "post" }, null))
{
    ....
}
而不是:

var getresult = function (data) {
    alert(data.result);
};
试一试


您需要包括
jquery.unobtrusiveajax.js
文件

<script src="~/Scripts/jquery.unobtrusive-ajax.js"></script>

JsonResult只是一种ActionResult派生类,它指示此操作将返回JSON,而不是视图或其他内容

例如:

 @using (Ajax.BeginForm("CreateProductFromAjaxForm","Product" , null, 
              new AjaxOptions() {  OnSuccess = "getresult" }, null))
这将生成一个元素,当提交到操作时,该元素将发送一个AJAX请求。为此,您需要在页面中包含以下脚本:

现在只需编写这个onSuccess javascript函数并处理服务器返回的JSON结果:

<script type="text/javascript">
var onSuccess = function(data) {
    alert(data.result);
};
</script

var onSuccess=函数(数据){
警报(数据、结果);
};

我的项目也面临同样的问题。问题在于没有加载Ajax库。当我检查我的
bundleconfig
和我的布局文件时,它确实包含了include,但我包含了ajax库的绝对名称,比如

bundles.Add(new ScriptBundle("~/bundles/jqueryajax").Include(
"~/Scripts/jquery.unobtrusive-ajax.min.js"));
我的朋友让我改用通配符。惊人地
bundles.Add(新脚本包(“~/bundles/jqueryajax”)。包括(“~/Scripts/jquery.unobtrusiveajax*”)已开始包含ajax库

现在,我的<代码>成功> /COD>函数按预期加载,而不是用JSON响应查看空白屏幕。 第页

new AjaxOptions() {  
    OnSuccess = "getresult", 
}
在javascript中

function getresult(data){
   alert(data.x);
}
在c中#


你能发布你的
getresult
方法的定义吗?在javascript函数中放置一个虚拟警报,看看它是否被调用,比如:
alert('hello')
@RuiJarimba:not luck with
alert('hi')其中之一。不幸的是;没有区别。再一次;没有成功。我甚至试图省略
数据
参数:相同的结果。我的脚本目录中没有这个。我使用的是MVC5。我应该下载它吗?是的,使用NuGet软件包在2017年找到微软jQuery低调的Ajax.Life saver
bundles.Add(new ScriptBundle("~/bundles/jqueryajax").Include(
"~/Scripts/jquery.unobtrusive-ajax.min.js"));
new AjaxOptions() {  
    OnSuccess = "getresult", 
}
function getresult(data){
   alert(data.x);
}
[HttpPost]
public ActionResult CreateProductFromAjaxForm(CreateProductModel model)
{
    if (!ModelState.IsValid)
    {
        return Json("error", JsonRequestBehavior.AllowGet);
    }

   //add to database

    return Json(model, JsonRequestBehavior.AllowGet);
}