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

时间:2014-07-30 20:48:14

标签: c# asp.net-mvc

我使用复杂类型的远程验证。由于我的字段名称可能类似于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

2 个答案:

答案 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");
    ...
}