根据视图使用不同的updatetargetid

时间:2009-05-29 10:46:52

标签: asp.net-mvc

我有一个网页,显示HTML表格中的项目列表。列表上方是一个表单,允许用户通过AJAX(使用Ajax.BeginForm)将新项添加到列表中。当数据通过AJAX发布到控制器时,我将新项添加到数据库后端,并通过部分视图生成新的表行,然后将其附加到现有表。

当添加新项目的表单包含错误时,我想将表单呈现回Web浏览器并显示该表单。

所以这就是问题:是否可以在控制器中指定UpdateTargetId?目前,我从控制器返回的任何视图都插入到同一目标中,但我想根据从控制器返回的任何视图更新不同的目标(即不同的UpdateTargetId)。

3 个答案:

答案 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在表中创建新行。