远程验证不会;t将数据传递给行动

本文关键字:数据 程验证 验证 | 更新日期: 2023-09-27 17:58:59

我有型号:

public class MyModel
...fields
[Remote(ActionName, ControllerName)]
public string SomeNumber { get; set; }
..fields

并在ControllerName控制器中执行操作:

public JsonResult ActionName(string someNumber)
{...}

但当调用操作时,参数someNumber始终为null。当我试着调试它时,我得到了

GET /ControllerName/ActionName?MyModel.SomeNumber =34189736 

我怎样才能让它工作?(我无法传递整个模型MyModel,也无法更改MyModel.SomeNumber视图中字段的名称)

UPD在我看来输入:

<input data-val="true" data-val-remote-additionalfields="*.SomeNumber" data-val-remote-url="/ControllerName/ActionName" id="MyModel_SomeNumber" name="MyModel.SomeNumber" type="text" value="34189734" class="valid">

UPD已解决!:)我用单个字段SomeNumber创建了新模型,并使用前缀:

SomeNumber([Bind(Prefix = "MyModel")]MySingleFieldModel model)

远程验证不会;t将数据传递给行动

如果使用嵌套的ViewModels,则需要接受父ViewModel作为Validation操作中的参数。例如:

public class ParentViewModel
{
    public UserViewModel User {get; set; }
    //....
}
public class UserViewModel 
{
    [Remote("UniqueUsername", "Validation")]
    public string Username { get; set; }
    //....
}

验证中控制器:

public class ValidationController : Controller
{ 
     public JsonResult UniqueUsername(ParentViewModel Registration) 
     {
        var Username = Registration.User.Username; //access the child view model property like so
        //Validate and return JsonResult
     }
}

尝试使用您的模型作为参数。这样它就可以将值绑定到它上。

public JsonResult ActionName(MyModel model)
{
    //...
    model.SomeNumber;
    //...
   return Json(validationResult, JsonRequestBehavior.AllowGet)
}
public JsonResult ActionName(string SomeNumber)
{...}

我认为您可能需要在输入参数上匹配大小写。