我有一个网页,显示HTML表格中的项目列表。列表上方是一个表单,允许用户通过AJAX(使用Ajax.BeginForm)将新项添加到列表中。当数据通过AJAX发布到控制器时,我将新项添加到数据库后端,并通过部分视图生成新的表行,然后将其附加到现有表。
当添加新项目的表单包含错误时,我想将表单呈现回Web浏览器并显示该表单。
所以这就是问题:是否可以在控制器中指定UpdateTargetId?目前,我从控制器返回的任何视图都插入到同一目标中,但我想根据从控制器返回的任何视图更新不同的目标(即不同的UpdateTargetId)。
答案 0 :(得分:5)
我认为解决方法可能是使用JSON并在回调函数中检查结果。这就是它的样子:
function handleAjax(response) {
var result = response.get_response().get_object();
var isSuccess = result[0].isSuccess;
if(isSuccess = "true")
{
$("#resultdiv").html(result[0].html);
}
else
{
$("#formdiv").html(result[0].html);
}
}
在你的行动中,你可以写下:
public ActionResult SaveRecord(Entity entity)
{
if(ModelState.IsValid(){
return Json(new{isSuccess = true, html = PartialView("RowViewName")});
}
else
{
return json (new{isSuccess = false, html = PartialView("FormViewName")})
}
}
我今天遇到了同样的问题,找不到“合法”的做法。我认为这个简单的解决方法应该完成它。目前代码完全未经测试。
请阅读此blog post以获取替代解决方案。
答案 1 :(得分:0)
我认为另一个想法可以是使用
将服务器重定向到另一个控制器/操作RedirectToAction(new {controller="home", action="index", id=931,variable="abc"});
所以如果表单包含一个错误RedirectToAction ...它甚至可以包含另一个可以放在另一个DIV中的PartialView ......
只是一个想法...答案 2 :(得分:0)
基本上你想要的是在你发出ajax请求时根据某些条件返回2个不同的结果。不幸的是,对于AjaxForm的实际实现是不可能的。您只能更新表单的单个区域。
此问题的一种可能的解决方法可能是创建一个部分视图,其中表单更新并从控制器返回局部视图,然后在onSuccess事件中使用普通旧javascript在表中创建新行。