如何使用正则表达式与绑定属性

本文关键字:绑定 属性 正则表达式 何使用 | 更新日期: 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");
    ...
}