无法使BindAttribute工作

时间:2009-08-20 14:23:27

标签: asp.net-mvc

我遇到了从视图到对象绑定值的问题。不知何故,对象将所有值设置为null。

在我的viewmodel中我有:

public class UserAdminEditViewModel
{
    public User User { get; set; }
    public IEnumerable<Usergroup> Usergroups { get; set; }
    public IEnumerable<User> Users { get; set; }

    public UserAdminEditViewModel() {}
}

在我的控制器中我有:

[AcceptVerbs(HttpVerbs.Post)]       
public ActionResult UserEdit(
    [BindAttribute(
        Include="UserID,UserName,Email,Password,Firstname,Surname")]
    UserAdminEditViewModel User, 
    int[] UsergroupID)
{        
    if (ModelState.IsValid)
    {
        try
        {
            for(int i = 0; i < UsergroupID.Length; i++)
            {                         
                User.User.Usergroups.Add(
                    _ug.GetUsergroups(UsergroupID[i]).First());    
            }

            _us.SaveUser(User.User);

在我的编辑视图中,我有:

<%= Html.TextBox("User.Username", Model.User.Username) %>
<%= Html.TextBox("User.Firstname", Model.User.Firstname) %>

等等。

我尝试过:

<%= Html.TextBox(
        "User.Username", Model.User.Username, new { id = "User.Username" } ) %>

等,但这也不起作用......只有当我删除BindAttribute时才有效...

如何解决这个问题,我无法通过所有模型列......

提前致谢 / M

3 个答案:

答案 0 :(得分:0)

要使用属性,必须在没有类名的“属性”部分的情况下指定其名称,例如:

public ActionResult UserEdit([Bind(Include="UserID,UserName,Email,Password,Firstname,Surname")]UserAdminEditViewModel User, int[] UsergroupID)
{

例如,AcceptVerbs也是一个属性,相关的类叫做AcceptVerbsAttribute ...

还有一个细节:Controller类包含一个名为User的属性,它表示启动对action方法的调用的经过身份验证的用户。如果创建名为User的参数,则只需隐藏“默认”User属性。您可能想要更改参数的名称!

否则,您仍然可以通过

访问控制器的用户属性
base::User

答案 1 :(得分:0)

您是否尝试将前缀添加到Bind属性,作为Prefix属性或作为包含的一部分,例如:

public ActionResult UserEdit([Bind(Include="User.UserID,User.UserName,User.Email,User.Password,User.Firstname,User.Surname")]User User, int[] UsergroupID)

答案 2 :(得分:0)

将错误的类传递给回发操作

相关问题