Asp.net mvc Json结果提示“;另存为;浏览器中的对话框,而不是正在处理的对话框。ASP.NETMVC
我知道这对其他人来说是个问题,但我还没有找到任何方法来解决我的问题 我有一个局部视图,它显示在一个灯箱(colorbox)中。这是一种简单的形式。我希望表单提交并返回一点数据。这些数据将用于调用后续函数,我希望主DIV只更新一条“success”消息。以下是部分视图的完整代码:Asp.net mvc Json结果提示“;另存为;浏览器中的对话框,而不是正在处理的对话框。ASP.NETMVC,asp.net-mvc,ajax,json,Asp.net Mvc,Ajax,Json,我知道这对其他人来说是个问题,但我还没有找到任何方法来解决我的问题 我有一个局部视图,它显示在一个灯箱(colorbox)中。这是一种简单的形式。我希望表单提交并返回一点数据。这些数据将用于调用后续函数,我希望主DIV只更新一条“success”消息。以下是部分视图的完整代码: <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Solution2.Models.Category>" %>
<%@ 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>
<% } %>
目前,我没有在部分视图代码中实际使用任何结果数据(即使我在“success”参数中引用了它)。我只是想让它工作(而不是提示我保存结果)
谢谢。通常情况下,您不会直接通过普通表单提交将Json返回到用户浏览器。这是一种很好的方式来传递您计划在内部消化的信息(如您所描述的),但是按照上面的方式将Json数据吐回给用户,就像。。。。Javscript——它不是有效的HTML,根据浏览器的配置,它可能会弹出一个“另存为”对话框 在您的示例中,您可以尝试将默认操作设置为返回创建视图,并进行如下检查:
if (Request.IsAjaxRequest())
{
return Json(.......);
}
else
{
return View(....);
}
…并将函数返回类型更改为ActionResult
这将确保页面的初始加载显示实际视图。对同一页面的Ajax调用(从页面上的按钮)将只返回您感兴趣的Json数据
更新:
如果除了更新的Json内容外,操作应该显示相同的页面,我建议不要使用Submit按钮。只需使用普通的输入按钮,并将单击操作绑定到您的
jQuery.ajax
调用。数据将从Create/POST
操作中接收,并将根据Ajax调用中的success:
子句进行填充。我也遇到过同样的问题,这对我很有效:
return new JsonResult
{
ContentType = "text/html",
Data = new { foo = 1, bar = "Something" }
};
显式创建一个新的
JsonResult
对象,设置ContentType
并返回,而不是使用Json
方法。使用Firefox+Firebug。谢谢。您有什么建议可以最好地处理我想做的事情,即在色盒中显示和处理一个简单的表单?我对这一切都很陌生。谢谢,但是你如何处理视图上的响应?不,它将输出写入浏览器。
return new JsonResult
{
ContentType = "text/html",
Data = new { foo = 1, bar = "Something" }
};