我使用复杂类型的远程验证。由于我的字段名称可能类似于name =" user.name",我需要使用BindAttribute之类的
public JsonResult ValidName[Bind(Prefix="user.name")]string name){ ... }
或绑定不起作用。
问题在于,会有许多不同的名称以"user.name"
或"employee.user.name"
结尾"manager.user.name"
。
那么,是否可以将名称以"user.name"
结尾的所有字段绑定到方法声明中的string name
?
答案 0 :(得分:1)
您误解了Prefix
的用法。它用于识别复杂的属性名称(点符号)以开头,而不是以。例如,如果您的视图模型MyModel
具有复杂属性Organisation
,其复杂属性Address
具有属性City
,那么在您查看中,您可能拥有
@model MyModel
@Html.TextBoxFor(m => m.Organisation.Address.City)
将呈现以下html
<input name="Organisation.Address.City" ...... />
如果您只想回发City
的值,那么您可以使用
public ActionResult Edit([Bind(Prefix="Organisation.Address")] string city)
同样,如果你只想回发Address
的所有值,那么它将是
public ActionResult Edit([Bind(Prefix="Organisation")] Address address)
{
string city = address.City;
所以在你的情况下,你需要两个
public JsonResult ValidName[Bind(Prefix="employee.user")] string name)
和
public JsonResult ValidName[Bind(Prefix="manager.user")] string name)
答案 1 :(得分:0)
您可以使用Request.QueryString
在控制器方法中手动绑定所需的参数。这是一个快速代码,用于绑定以指定后缀
private bool EndWith(string input, string end)
{
string pattern = @"" + end + @"$";
Regex rx = new Regex(pattern, RegexOptions.IgnoreCase);
return rx.Match(input).Success;
}
private string bindSuffix(string suffix)
{
string result = null;
foreach (var key in Request.QueryString.AllKeys)
{
if (EndWith(key, suffix))
{
result = Request.QueryString[key];
}
}
return result;
}
//Then use it like that
public JsonResult ValidName()
{
string name = bindSuffix("user.name");
...
}