使用RemoteValidation在客户端纠正输入

时间:2012-04-06 12:16:48

标签: asp.net-mvc-3 remote-validation

是否有可能使用远程验证来纠正客户端的输入? 例如,用户将输入日期 010101 ,这意味着 01-Jan-2001 ,远程验证可以反映/传递整改后的值( 010101 进入 01-Jan-2001 )/到客户端?

我有一个场景,我有JS将输入格式化为正确的日期格式。后来我不得不使用RemoteValidation。我的远程验证以 ddmmyy 格式接收日期(在JS之前调用RemoteValidation),它首先将其转换为正确的日期然后执行验证,然后我的JS根本不会被调用,所以 010101 未转换为 01-Jan-2001

修改

我希望得到两件事

1-无论如何,远程验证功能可以修改传递给它的模型/数据以进行验证,然后将其传递回视图,以便用户可以看到模型/数据的修改版本

[已删除:2-我有一个日期字段的JavaScript,用于格式化焦点丢失的日期。它工作正常。当我使用远程验证和JS时,脚本根本不会被调用。]

修改

模型

public class master
{
    public string sometext { get; set; }
    public child mychild { get; set; }
}   

public class child
{
    public child()
    {
        thedate = DateTime.MaxValue;
    }
    [Remote("ValidateDate", "Test", ErrorMessage = "Invalid Date")]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:mm/dd/yyyy}", NullDisplayText = "Enter Date")]
    public DateTime? thedate { get; set; }
}

查看

@model Models.master
@using Web.Framework

@{
    Layout = null;
    }

<html>
<head>
    <title>Test - My ASP.NET MVC Application</title>
        <script src="@Url.Scripts("jquery-1.7.1.min.js")" type="text/javascript"></script>
        <script src="@Url.Scripts("jquery-ui-1.8.11.js")" type="text/javascript"></script>
        <script src="@Url.Scripts("modernizr-2.0.6-development-only.js")" type="text/javascript"></script>
        <script src="@Url.Scripts("AjaxLogin.js")" type="text/javascript"></script>
        <script src="@Url.Scripts("jquery.validate.min.js")" type="text/javascript"></script>
        <script src="@Url.Scripts("jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
        <script src="@Url.Scripts("jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
        <script src="@Url.Scripts("MicrosoftAjax.js")" type="text/javascript"></script>
        <script src="@Url.Scripts("MicrosoftMvcAjax.js")" type="text/javascript"></script>

        <script src="@Url.Scripts("myScripts.js")" type="text/javascript"></script>
</head>
<body>
@using (Html.BeginForm("testSubmit", "Test"))
{
    @Html.LabelFor(m => m.sometext)
    <br />
    @Html.TextBoxFor(m => m.sometext)
    <br />

    @Html.LabelFor(m => m.mychild.thedate)
    <br />
    @Html.TextBoxFor(m => m.mychild.thedate, new { onblur = "doDate(this, '');" })
    @Html.ValidationMessageFor(m => m.mychild.thedate)

        <br />
    <input type="submit" value = "Submit me" />   
}
</body></html>

控制器

public ActionResult testSubmit(master model)
{
    @ViewBag.Message = "OK";
    return View("response");
}

public JsonResult ValidateDate(DateTime? thedate)
{
    return Json(HttpContext.Request.QueryString["mychild.thedate"].ToString(), JsonRequestBehavior.AllowGet);
}

我的远程验证器总是在thedate中收到空值,但我可以从查询字符串中访问该值,但是该值未格式化,即在JS之前调用远程验证,这意味着我必须先在远程函数中格式化日期,然后验证,一旦验证,此输入将由JS再次格式化,并且两者都必须同步。

现在,如何在Remote函数中获取格式化值或将Remote函数中的格式化值传递给View?

1 个答案:

答案 0 :(得分:0)

由于我没有得到任何答案所以到目前为止,答案是“否”。