1

我创建了一个非常简单的测试项目来说明问题。

我的模特班

public class HomeModel
{
    [Required(ErrorMessage="Missing property1.")]
    public string Property1
    {
        get;
        set;
    }

    [Remote("ValidateProperty2", "Home", HttpMethod="Get",  AdditionalFields = "Property3", ErrorMessage="Property2 wrong!")]
    public string Property2
    {
        get;
        set;
    }

    public string Property3
    {
        get;
        set;
    }
}

我的控制器

public class HomeController : Controller
{
    public ActionResult Index()
    {
        HomeModel model = new HomeModel();
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(HomeModel model)
    {
        return View(model);
    }

    public ActionResult ValidateProperty2(string property2, string property3)
    {
        return Json(true, JsonRequestBehavior.AllowGet);
    }
}

而我的看法

@model RemoteValidationTest.Models.HomeModel

@{
Layout = null;
}

<!DOCTYPE html>

<html>
<head>
<title>Index</title>
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
</head>
<body>
@using (Ajax.BeginForm(new AjaxOptions
{
    HttpMethod = "POST"
}))
{
    @Html.TextBoxFor(x => x.Property1) @Html.ValidationMessageFor(x => x.Property1)<br />
    @Html.TextBoxFor(x => x.Property2) @Html.ValidationMessageFor(x => x.Property2)<br />
    @Html.TextBoxFor(x => x.Property3) @Html.ValidationMessageFor(x => x.Property3)<br />

    <input type="submit" />
}
</body>
</html>

还有我的 web.config

<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/> 

这里没有什么特别的。我有一个具有 3 个属性的模型类。第一个是必需的,第二个是远程验证,我相信我已经正确地创建了动作方法。我将 break piont 设置为ValidateProperty2起作用,它永远不会被调用。

我也用过FireBug,同样的东西客户端甚至不尝试调用服务器端。

这里的代码有什么问题?

编辑1:我想我得到了一些东西,远程验证只会在控件(例如文本框)在侧面具有值时触发。空控件永远不会触发验证。在我的情况下,我实际上尝试实现更复杂的逻辑,即使控制文本为空,我也需要触发验证(以检查其他属性的值)。甚至可能吗?

4

2 回答 2

0

我在这里有一个适用于 mvc3 的工作版本:http: //completedevelopment.blogspot.com/2011/08/remote-ajax-validation-in-mvc3.html

d/l 它,您可以比较文件。

于 2011-12-01T20:38:46.353 回答
0

问题是当您第一次按下发送按钮时验证不会自动触发。以下是您在页面加载时启动验证的方式,以便在每次提交时触发它:

“必需”验证属性在 asp.net mvc 3 中不起作用,而其他属性则起作用

于 2011-12-01T23:19:39.190 回答