我有以下操作方法,它返回部分视图_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) ;
}
}
:: - 更新 - ::
我想做的事情如下: -
我正在使用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)),
}))
成功收到服务器的响应后,将执行Onsuccess脚本,,,脚本只需禁用该表单: -
function disableform(id) {
$('#' + id + ' :input').prop("disabled", true);
}
问题是脚本将始终禁用表单,即使发生了一些验证错误,所以我试图实现的是返回一个带有部分视图的JSON,指示ModelState是否.IsValid是否有效,如果无法启用表单以允许用户更正验证错误。
BR
答案 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)