【发布时间】:2013-05-21 06:18:53
【问题描述】:
假设我有一个包含表单的弹出窗口。我必须有一个处理表单的控制器,根据结果,这个控制器返回 JSON(如果一切顺利,并且弹出窗口可以通过 javascript 关闭)或 HTML(如果表单数据无效并且必须替换表单带有新的 html - 带有验证错误消息)。 所以我找到了这样一个解决方案:那就是形式:
<form id="message" ...>
...
</form>
我有这个表单的 jquery 处理程序:
$(document).on("submit", "form#message", function (evt) {
evt.preventDefault();
$.ajax({
type: this.method,
url: this.action,
data: $(this).serialize(),
success: function (result) {
if ($.isPlainObject(result)) {
// this is JSON
// close the pop-up window
} else {
// this is HTML
$("form#message").html(result);
}
}
});
});
控制器:
[HttpPost]
public ActionResult UpdateMessage(MessageModel model)
{
...
if (.. is valided ..)
return Json(new { success = "OK" });
else
return View(model);
}
问题 - 对于此类任务是否有更优雅的解决方案?
【问题讨论】:
-
为清楚起见,为什么不只在 json 键中返回 html 并简单地检查是否设置了错误键?
-
@fliespl,将 ASP.NET MVC 视图呈现为服务器上的字符串并将这些部分序列化为 JSON 有点像 PITA。
-
真的吗?如果我没记错的话,你可以只用几行简单地渲染部分 - 可能与你的代码中的数字相同:)
-
@fliespl,是的,有一些黑客可以做到这一点,但我总是找到它们,嗯,hacks。
-
@DarinDimitrov 我不是 ASP.NET 专家 - 我只记得在这种情况下重新渲染部分 - 很高兴知道这些被视为 hack。
标签: jquery ajax asp.net-mvc asp.net-mvc-4