MVC - 字段中的默认值

时间:2010-11-19 22:02:29

标签: asp.net-mvc

我的控制器中有以下代码:

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Create([Bind(Exclude = "Id")] BackupSet AccountToCreate)
    {
        if (!ModelState.IsValid)
            return View();

        _DBE.AddToBackupSet(AccountToCreate);
        _DBE.SaveChanges();

        return RedirectToAction("Index");
    }

我需要将User.Identity.Name的值设置为我将其发布到数据库时创建视图中某个字段的值。

我确信它非常简单,但实际上并不知道如何。

谢谢, 史蒂夫。

3 个答案:

答案 0 :(得分:1)

为什么需要在视图中存储用户名?您肯定会在控制器内启动数据库事务,因此,如果它是当前登录用户的用户名,请按照上一个建议使用MembershipProvider:

HttpContext.Current.User.Identity.Name

如果不是,你应该考虑创建一个明确代表你的View模型的容器/包装类 - 有些人可能会认为这对于一个额外的属性来说有点过分,但我讨厌代码中的“魔术字符串”。

public class MyView
{
    public string UserName { get; set; }
    public MyObject MyMainObject { get; set;}

    public MyView(string username, MyObject myMainObject)
    {
        this.Username = username;
        this.MyMainObject = myMainObject;
    }
}

然后将您的视图模型类型设置为:

System.Web.Mvc.ViewPage<MyNamespace.MyView>

然后,您可以为视图中的所有内容添加强类型属性,例如

<%=Model.Username %>
<%=Model.MyMainObject.Title %>

在您的控制器中,您可以将操作参数化为

public ActionResult(MyMainObject myMainObject, string username)
{
     //Do something here

     //if not correct
     return View(new MyView(username, myMainObject));
}

如果您想沿着这条路走下去:

ViewData["Name"] = User.Identity.Name;

ViewData.Add("Name", User.Identity.Name);

考虑创建枚举以再次避免使用字符串文字,例如

public enum UserEnum
{
   Username,
   Password
}

然后使用:

ViewData.Add(UserEnum.Username.ToString(), User.Identity.Name);

答案 1 :(得分:0)

视野中的一个字段?

如何简单地设置

ViewData["Name"] = User.Identity.Name 

然后在View中随时随地使用它。

答案 2 :(得分:0)

简答:

HttpContext.Current.User.Identity.Name

长答案:

您应该提供会员服务以提供该价值。默认的MVC2项目将提供IMembershipService接口,您可以扩展它以提供属性:CurrentUserName(或任何您喜欢的)

public string CurrentUserName
        {
            get
            {
                var context = HttpContext.Current;
                if (null != context)
                    return context.User.Identity.Name;

                var user = Thread.CurrentPrincipal;
                return (null == user)
                           ? string.Empty
                           : user.Identity.Name;
            }
        }