MVC 3用户保存与前端传递的实体

时间:2012-03-05 16:45:52

标签: asp.net-mvc-3 model-binding

我有一个场景,我创建与创建它们的登录用户(Windows身份验证)相关联的“机器”实体。只有在创建了至少一个Machine实体后,才会在数据库中创建用户。

我在create Machine表单上使用模型绑定。 Machine模型有一个关联的User实体,一个如下所示的自定义实体:

public class User
{
    public int UserId { get; set; }

    [DisplayName("User")]
    public string Username { get; set; }

    public string Email { get; set; }

    public int SectorId { get; set; }
    public Sector Sector { get; set; }

    public List<Machine> Machines { get; set; }
}

到目前为止,在创建机器视图中,我使用以下内容为用户名创建了一个隐藏输入:

@Html.HiddenFor(model => model.User.Username, new { User.Identity.Name })

但我发现当它返回到HttpPost创建处理程序时,模型中没有填充它。

我想知道我怎么能用模型传递用户名?

1 个答案:

答案 0 :(得分:1)

首先,您使用HiddenFor()方法调用时遇到的问题是第二个参数应该是htmlAttributes的object。所以你的方法调用不正确。 (MSDN Reference for the HiddenFor() method):

public static MvcHtmlString HiddenFor<TModel, TProperty>(
    this HtmlHelper<TModel> htmlHelper,
    Expression<Func<TModel, TProperty>> expression,
    Object htmlAttributes
)

为什么要在View中填充此内容?将此逻辑带到控制器:

[HttpPost]
public ActionResult GetUser(User newUser)
{
    newUser.UserName = User.Identity.Name;

    // now do something with the passed in model
}