如何使用正则表达式与绑定属性
本文关键字:绑定 属性 正则表达式 何使用 | 更新日期: 2023-09-27 18:15:37
我使用复杂类型的远程验证。因为我的字段名可以是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
?
您误解了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)
您可以使用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");
...
}