我的控制器中有以下代码:
[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的值设置为我将其发布到数据库时创建视图中某个字段的值。
我确信它非常简单,但实际上并不知道如何。
谢谢, 史蒂夫。
答案 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;
}
}