Ajax表单、验证和错误
本文关键字:错误 验证 表单 Ajax | 更新日期: 2023-09-27 18:18:16
所以我有一个Ajax表单与验证,这是有效的。我的问题是我的POST Action:
[HttpPost]
public ActionResult AddUpdateConfigs(StorageConfigurationModel modelbind)
{
if (ModelState.IsValid)
{
//blablabla more code
}
else
{
return PartialView("cbpnlNewUpdateConfigs",modelbind);
}
}
当模型有效时,我所做的一件事是尝试使用值,例如,我拥有的UNC路径,我需要查看该UNC路径是否存在,所以我这样做:
try
{
DirectoryInfo dir = new DirectoryInfo(modelbind.Location);
if (dir.Exists)
{
//bla bla bla
}
else
{
return //something I dont know what
}
}
catch (Exception j)
{
return //something I dont know what
}
所以我不知道什么是正确的返回来匹配Action
类型,并且在客户端也有适当的消息。
任何想法?
您可以在您的ModelState
中添加一个错误:
ModelState.AddModelError(string.Empty, "Path does not exist.");
这里的关键是使用string.Empty
作为ModelState.AddModelError
的key
。
然后显示在视图中:
@Html.ValidationSummary()
这样你就可以使用与你的模型无效时相同的视图(!ModelState.IsValid
)。
来源:模型状态。AddModelError -我如何为属性添加一个不存在的错误?
对于第一个条件,您可以使用HttpStatusCode枚举并使用NotFound常量。
http://msdn.microsoft.com/en-us/library/system.net.httpstatuscode.aspx对于异常,如果你想使用特定的HTTP错误响应代码,你需要确切地找出异常是什么。
否则,您可以使用InternalServerError来指示发生了一般服务器错误。
希望有帮助
夏巴兹您可以返回具有Success
属性的JsonResult
和视图的Html
或错误Message
,您可以从ajax响应对象中读取:
[HttpPost]
public JsonResult AddUpdateConfigs(StorageConfigurationModel modelbind)
{
if(!allowed) {
return Json(new { Success = false, Message = "blah blah blah"}, JsonRequestBehavior.DenyGet);
}
else
{
return Json( new {Success = true, Html = RenderPartialView("cbpnlNewUpdateConfigs", model)}, JsonRequestBehavior.DenyGet);
}
}
public static class PartialViewHelper
{
public static string RenderPartialView(this Controller controller, string viewName, object model)
{
if (string.IsNullOrEmpty(viewName))
viewName = controller.ControllerContext.RouteData.GetRequiredString("action");
controller.ViewData.Model = model;
using (var sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName);
var viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
public static string RenderView(this Controller controller, string viewName, object model)
{
if (string.IsNullOrEmpty(viewName))
viewName = controller.ControllerContext.RouteData.GetRequiredString("action");
controller.ViewData.Model = model;
using (var sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindView(controller.ControllerContext, viewName, String.Empty);
var viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
}
由于是ajax调用,您可以发送JSON格式的响应。
if(someConditionTrue)
{
//Make changes to DB
return Json(new { Status="Success"});
}
else
{
return Json(new { Status="Error", Message="Directory not found"});
}
在你的客户端,你可以检查结果,并显示适当的信息给用户。
$.post("someValidUrl",$("#form1").serialize(),function(response){
if(response.Status=="Error")
{
alert(response.Message);
}
});
你可以在JSON结果中发送你的部分视图的标记(在成功的情况下),并用它来替换你想要更新内容的div的html。