我遇到了从视图到对象绑定值的问题。不知何故,对象将所有值设置为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
答案 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)
将错误的类传递给回发操作