0

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

我的 Action 方法如下所示:-

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 调用操作方法

    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);
    }
    

问题是脚本将始终禁用表单,即使发生一些验证错误,所以我试图实现的是返回一个带有部分视图的 JSON,指示 ModelState.IsValid 是否有效,以及如果保持表单启用以允许用户更正验证错误是无效的。

BR

4

4 回答 4

0

为什么不简单地扩展您已经传递给 View 添加属性的模型IsSuccess

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

于 2012-05-03T13:50:11.077 回答
0

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

于 2012-05-03T13:43:53.903 回答
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);

Wherehelper可帮助您向局部视图添加验证。(此处描述:https ://stackoverflow.com/a/4270511/952023 )

于 2013-07-26T12:47:29.737 回答
0

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

ViewBag.IsSuccess =  "True";

或者

ViewData["IsSuccess"] = "True";
于 2012-05-03T13:42:51.213 回答