我是MVC的新手,所以希望我的问题能够直截了当。我在想一个用户提交表单(即部分视图)并经过服务器验证的场景。我想知道在提交表单后我将如何知道客户端(javascript)上的验证结果。例如,如果验证失败,我显然希望再次返回部分视图并设置验证消息,但如果它通过验证,我可能不一定要返回局部视图。我可能想要返回带有消息的json对象或隐藏div或其他东西。我希望能够在客户端上确定验证结果。有可能吗?或者我可以用不同的方式处理这个问题吗?
答案 0 :(得分:3)
AJAX的棘手部分是客户端和服务器都必须就在任何情况下应该从服务器返回的内容达成一致。您有几个选择:
PartialView
结果。如果模型有效,则返回<script>
标记,告知页面需要执行的操作(例如,关闭对话框,重定向到其他页面,等等)。当jQuery尝试将它们插入到DOM中时,它将自动运行它在结果中找到的任何脚本。答案 1 :(得分:2)
部分视图没有布局页面。您可以使用此代码检查视图是否呈现为部分视图。
@if (String.IsNullOrWhiteSpace(Layout))
{
// Do somthing if it is partial view
}
else
{
// Do somthing if it is full page view
}
答案 2 :(得分:0)
如果您使用MVC数据注释来验证模型,那么控制器将有一个名为ModelState (typeof(ModelStateDictionary)的属性,它作为IsValid
的属性来确定您的模型是否传递给Controller / Action是有效的。
使用IsValid
,您可以返回一个Json对象,该对象可以告诉您的Javascript下一步该做什么。
<强>更新强>
这是一个非常基本的例子(使用jQuery):
[SomeController.cs]
public class SomeController : Controller
{
public ActionResult ShowForm()
{
return View();
}
public ActionResult ValidateForm(MyFormModel FormModel)
{
FormValidationResults result = new FormValidationResults();
result.IsValid = ModelState.IsValid;
if (result.IsValid)
{
result.RedirectToUrl = "/Controller/Action";
}
this.Json(result);
}
}
[FormValidationResult.cs]
public class FormValidationResults
{
public bool IsValid { get; set; }
public string RedirectToUrl { get; set; }
}
[View.js]
$(document).ready(function()
{
$("#button").click(function()
{
var form = $("#myForm");
$.ajax(
{
url: '/Some/ValidateForm',
type: 'POST',
data: form.serialize(),
success: function(jsonResult)
{
if (jsonResult.IsValid)
{
window.location = jsonResult.RedirectToUrl;
}
}
});
});
});