我有模型:
public class MyModel
...fields
[Remote(ActionName, ControllerName)]
public string SomeNumber { get; set; }
..fields
并在 ControllerName Controller 中执行一个操作:
public JsonResult ActionName(string someNumber)
{...}
但是当调用 Action 时,参数 someNumber 始终为 null。 当我尝试调试它时,我得到了
GET /ControllerName/ActionName?MyModel.SomeNumber =34189736
我怎样才能让它发挥作用? (我无法传递整个模型 MyModel,也无法在我的 View 中更改 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)
最佳答案
如果您使用嵌套的 ViewModels
,您需要接受父 ViewModel
作为您的 Validation
操作中的参数。例如:
public class ParentViewModel
{
public UserViewModel User {get; set; }
//....
}
public class UserViewModel
{
[Remote("UniqueUsername", "Validation")]
public string Username { get; set; }
//....
}
在验证 Controller 中:
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
}
}
关于c# - 远程验证不会将数据传递给操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14872285/