MVC3的远程模型验证操作中的参数名称

时间:2012-05-12 08:48:38

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

我对SSN属性使用远程验证属性,在视图页面I中使用通用视图,然后ssn字段如下:

@Html.EditorFor(model => model.MainModel.SSN)
@Html.ValidationMessageFor(model => model.MainModel.SSN)

和我的行动是:

public JsonResult IsValidaSSN(string SSN) {

  //....

    return Json(result, JsonRequestBehavior.AllowGet);

}

但始终SSN在操作中为空,我也尝试MainModelSSNMainModel_SSN但没有更改且始终为空,您的建议是什么?动作参数中MainModel.SSN的正确名称是什么?

3 个答案:

答案 0 :(得分:4)

您可以尝试指定前缀:

public Action IsValidaSSN([Bind(Prefix = "MainModel")] string SSN) 
{
    //....
    return Json(result, JsonRequestBehavior.AllowGet);
}

MainModel是用于发送数据的前缀=> MainModel.SSN

答案 1 :(得分:4)

另一个,更准确一点,接受Rahul的回答:

public JsonResult IsValidImageUrl(string SSN) {
    if (string.IsNullOrEmpty(SSN)) {
        string parmname = Request.QueryString.AllKeys.FirstOrDefault(k => k.EndsWith(".SSN"));
        if (!string.IsNullOrEmpty(parmname)) {
            SSN = Request.QueryString[parmname];
        }
    }

    //.... etc.

这可以使用多个参数。

旁注,您可能想重新考虑“GET”JSON方法与SSN相关的任何关联。

答案 2 :(得分:3)

我只使用第一个查询字符串参数解决了这个问题:

public JsonResult IsValidImageUrl(string value) {

    if (value == null && Request.QueryString.Count == 1) {
            value = Request.QueryString[0];
        }


    //....            

    return Json(result, JsonRequestBehavior.AllowGet);                    
}