我可以同时从我的action方法返回一个Partial视图和一个Json对象

时间:2012-05-03 13:40:23

标签: json asp.net-mvc-3

我有以下操作方法,它返回部分视图_create。但有没有办法传递一个Json对象,如return Json(new { IsSuccess = "True" },与部分视图。

我的行动方法如下: -

try
{
  if (ModelState.IsValid)
  {
     var v = repository.GetVisit(visitid);
     if (!(v.EligableToStart(User.Identity.Name)))
     { 
       return View("NotFound"); 
     }
     vlr.VisitID = visitid;
     repository.AddVisitLabResult(vlr);
     repository.Save();
     ViewBag.LabTestID = new SelectList(repository.FindAllLabTest(), "LabTestID", "Description", vlr.LabTestID);
     // return Json(new { IsSuccess = "True" }, JsonRequestBehavior.AllowGet);
     @ViewBag.status = "Added Succsfully";
     return  PartialView("_create",vlr) ;
   }
}

:: - 更新 - ::

我想做的事情如下: -

  1. 我正在使用ajax.beginform

    调用action方法
    using (Ajax.BeginForm("CreateAll", "VisitLabResult", new AjaxOptions
    {
      HttpMethod = "Post",
      UpdateTargetId = item.ToString(),
      InsertionMode = InsertionMode.Replace,
      OnSuccess = string.Format("disableform({0})", Json.Encode(item)),
    }))
    
  2. 成功收到服务器的响应后,将执行Onsuccess脚本,,,脚本只需禁用该表单: -

    function disableform(id) {
        $('#' + id + ' :input').prop("disabled", true);
    }
    
  3. 问题是脚本将始终禁用表单,即使发生了一些验证错误,所以我试图实现的是返回一个带有部分视图的JSON,指示ModelState是否.IsValid是否有效,如果无法启用表单以允许用户更正验证错误。

    BR

4 个答案:

答案 0 :(得分:0)

您只能从操作方法返回一个视图,如果您想要传递其他信息,请使用ViewData或ViewBag

ViewBag.IsSuccess =  "True";

或者

ViewData["IsSuccess"] = "True";

答案 1 :(得分:0)

不,您只能返回视图并传递JSON作为模型,或ViewBag(我推荐模型。)

答案 2 :(得分:0)

为什么不简单地将您已传递的模型扩展到添加属性IsSuccess的视图?

ViewBag或ViewData在我看来是邪恶的。尝试在将数据返回到视图时始终使用ViewModel。

答案 3 :(得分:0)

在这种情况下,我使用了以下解决方案:

在你的ajax表单定义集中:

OnComplete = "yourCallback"

然后:

yourCallback = function(response){
  var json = response.responseJSON;
  if(json.success){
     alert('Well done!');
  } else {
     var form = $('#formId');
     form.html(json.html);
     form.removeData("validator").removeData("unobtrusiveValidation");
     $.validator.unobtrusive.parse(form);
  }
}

您的控制器应该返回以下内容:

var result = new { success = false, html = helper.Partial("_YourPartial", model) };
return Json(result);

helper可帮助您在局部视图中添加验证。 (在此描述:https://stackoverflow.com/a/4270511/952023