2010-11-19 2 views
0
의 기본 값

나는이 내 컨트롤러에 다음 코드 : 내가 만들 수있는 필드 중 하나의 값으로 설정 User.Identity.Name의 값을 가질 필요가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"); 
    } 

내가 데이터베이스에 게시 할 때보기.

나는 매우 간단하지만 실제로 어떻게해야할지 모르겠다.

감사합니다. 스티브.

답변

0

하나의보기 필드가 있습니까?

하는 방법을 간단하게

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

를 설정하고 당신이 원하는 목적지 다음보기에서 사용에 대해.

+0

시도하고 좀 더 설명 할 것이다. –

+0

Rob은 내가 말하고자하는 답변에 대해 훨씬 자세히 설명했습니다. – neebz

0

짧은 답변 :

HttpContext.Current.User.Identity.Name 

긴 답변 :

당신은 아마 그 값을 제공하는 회원 서비스를해야합니다. 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; 
      } 
     } 
1

왜 당신이보기에 사용자 이름을 저장해야 할 : 기본 MVC2 프로젝트는 속성을 제공하기 위해 확장 할 수 있습니다 IMembershipService 인터페이스를 제공 할 것입니다? 아마도 당신이 컨테이너를 작성 고려해야하지 않으면

HttpContext.Current.User.Identity.Name 

: 그것은 현재의 마지막 제안에 따라,는 MembershipProvider 사용에 로그인 한 사용자의 사용자 이름이 있다면, 그래서 당신은 확실히 컨트롤러 내에서 DB 트랜잭션을 시작합니다/래퍼 클래스를 명확하게 귀하의 뷰 모델을 나타냅니다 - 일부는 하나의 여분의 재산에 대한 과잉 고려할 수 있지만 코드에서 "마법의 문자열"이 싫어.

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

이 다음 예를 들어,보기에 모두를위한 강력한 형식의 속성을 가질 수 있습니다 :로

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; 
    } 
} 

다음 뷰 모델 유형을 설정
<%=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); 

가 고려를 Enum을 만들어 다시 한번 피하십시오 g 문자열 리터럴

public enum UserEnum 
{ 
    Username, 
    Password 
} 

는 사용

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

좋아, 이제 오른쪽 페이지에 있습니다. 대답은 내가보기에 그것을해서는 안된다는 것입니다. 방금 AccountToCreate.agency = User.Identity.Name을 추가했습니다. 내 컨트롤러 코드에 이제는 대접을받습니다. 죄송합니다. 내 머리를 손에 넣기까지 약간의 시간이 걸렸습니다. 쉽게 알 수 있습니다! –

관련 문제