Json 结果在浏览器中提示“另存为”对话框,而不是被处理。 ASP.NET MVC

2024-03-14

我知道这对其他人来说也是一个问题,但我还没有找到任何可以解决我的问题的方法。

我有一个显示在灯箱(颜色箱)中的部分视图。这是一个简单的形式。我希望表单提交并返回一些数据。这些数据将用于调用后续函数,我希望主 DIV 只用“成功”消息进行更新。这是部分视图的完整代码:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Solution2.Models.Category>" %>

<script type="text/javascript">
    $('propcatform').submit(function(e) {
        e.preventDefault();

        $.ajax({
            type: "POST",
            url:  $(this).attr("action"),
            data: $(this).serialize(),
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            success: function(data) { document.getElementById('main1').innerHTML = "Success"; },
            failure: function() { document.getElementById('main1').innerHTML = "Failure"; }
        })
    });
    </script>

    <% using (Html.BeginForm(null, null, FormMethod.Post, new { id = "propcatform", name = "propcatform" }))
       {%>
        <div id="main1">
        <fieldset>
            <legend>Fields</legend>
            <p>
                <label for="CatTitle">Category Title:</label>
                <%= Html.TextBox("CatTitle") %>
                <%= Html.ValidationMessage("CatTitle", "*") %>
            </p>
            <p>
                <input type="submit" value="Create" />
            </p>
        </fieldset>
        </div>

    <% } %>

这是我的控制器代码。该代码有效,因为它成功地将表单数据添加到表/数据库中。我的“返回”线到底应该是什么样子?

[AcceptVerbs(HttpVerbs.Post)]
        public JsonResult Create(Category propcat)
        {

            Category resultcat = new Category();
            _db.Categories.InsertOnSubmit(propcat);
            _db.SubmitChanges();
            resultcat = propcat;
            return Json(new { CatID = resultcat.CatID, CatTitle = resultcat.CatTitle, message = "Category successfully created!" });
        }

目前,我实际上并未在部分视图代码中使用任何结果数据(即使我在“成功”参数中引用了它)。我只是想让它工作(而不是提示我保存结果)。

Thanks.


通常,您不会通过普通表单提交直接将 Json 返回到用户的浏览器。这是传递您计划在内部消化的信息(如您所描述的)的好方法,但是执行上面显示的操作会将 Json 数据吐回给用户,这看起来就像...... Javscript - 它不是有效的 HTML,并且取决于浏览器如何配置,可能会弹出“另存为”对话框。

在您的示例中,您可以尝试让默认操作返回“创建”视图并进行如下检查:

if (Request.IsAjaxRequest())
{
  return Json(.......);
}
else
{
  return View(....);
}

...并将函数返回类型更改为ActionResult.

这将确保页面的初始加载显示实际的视图。对同一页面的 Ajax 调用(通过页面上的按钮)将仅返回您感兴趣的 Json 数据。

UPDATE:

如果操作应显示除更新的 Json 内容之外的相同页面,我建议不要使用“提交”按钮。只需使用普通的输入按钮并将单击操作绑定到您的jQuery.ajax称呼。数据将从Create/POST操作并将根据success:Ajax 调用中的子句。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Json 结果在浏览器中提示“另存为”对话框,而不是被处理。 ASP.NET MVC 的相关文章

随机推荐